我刚刚看过这句话;

$ some-command >| /tmp/output.txt


标准重定向中使用了垂直管道,将一个命令的输出“插入”到另一个命令,实际上>|完全没有用,因为在这种情况下会和>一样吗?

评论

寻找> |网址:stackoverflow.com/questions/818255/in-the-bash-shell-what-is-21/…

对于其余图片,我强烈建议外壳程序的控制和重定向运算符是什么?

#1 楼

它不是没有用的-它是普通>重定向运算符的一种特殊形式(并且可能令人困惑的是,与管道无关)。 bash和大多数其他现代外壳程序都具有选项noclobber,该选项可防止重定向覆盖或破坏已经存在的文件。例如,如果noclobber是true,并且文件/tmp/output.txt已经存在,则该操作将失败:重定向运算符-即使设置了noclobber,重定向也将起作用。

您可以使用>|来确定当前环境中是否设置了noclobber

有关历史记录, “ noclobber”选项及其旁路功能均来自noclobber(70年代后期)。 set -o复制了它(80年代初),但使用了csh而不是ksh。 POSIX指定了>|语法(因此,所有的POSIX shell(包括bash,在某些系统上用作sh的较新的ash派生工具)都支持它。 Zsh支持两种语法。我不认为它已添加到任何Bourne shell变体中,但我可能是错的。

评论


@sch-重新记录您的历史记录(感谢您提供额外的信息,顺便说一句)-FreeBSD的sh自2002年5月以来就没有麻烦。

– D_Bye
2012年9月24日上午10:42