Bash:“> |”是做什么的?


148

我刚刚看到了这个记录。

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

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



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

Answers:


220

它不是没有用的-它是普通>重定向运算符的一种特殊形式(并且可能令人困惑的是,与管道无关)。bash并且大多数其他现代shell都有一个option noclobber,可以防止重定向覆盖或破坏已经存在的文件。例如,如果noclobber为true,并且文件/tmp/output.txt已经存在,则此操作将失败:

$ some-command > /tmp/output.txt

但是,您可以noclobber使用>|重定向操作符显式覆盖的设置-即使设置了重定向,重定向也将起作用noclobber

您可以使用noclobber来确定当前环境中是否设置了set -o

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


3
@sch-重新记录您的历史记录(感谢您提供更多信息,顺便说一句)shnoclobber
-FreeBSD
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.