Bash:“>|”是什么意思做?

Bash:“>|”是什么意思做?

我刚刚看到这个写下来;

$ 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 变体中,但我可能是错的。

相关内容