我刚刚看到这个写下来;
$ some-command >| /tmp/output.txt
标准重定向中使用垂直管道将一个命令的输出“管道”到另一个命令,>|
实际上完全没有用,因为它与在这种情况下相同>
?
答案1
它并非无用——它是普通>
重定向运算符的一种特殊形式(并且,可能令人困惑的是,与管道无关)。bash
大多数其他现代 shell 都有一个选项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 变体中,但我可能是错的。