我刚刚看到了这个记录。
$ some-command >| /tmp/output.txt
垂直管道用于标准重定向中,将一个命令的输出“管道传输”到另一个命令>|
,实际上完全没有用,因为与>
在这种情况下一样?
它不是没有用的-它是普通>
重定向运算符的一种特殊形式(并且可能令人困惑的是,与管道无关)。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变体中,但我可能是错的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句