在正常的 bash 重定向>
中,将标准输出重定向到文件,当它存在时覆盖>>
并将标准输出重定向到文件,当它存在时附加。
在 tcsh (c shell) 脚本中,我发现了>!
>>!
正在使用的运算符。这些运营商是做什么的?tcsh 也有>
and>>
操作符,那有什么区别呢?
在 tcsh 重定向中!符号表示覆盖现有文件,即使noclobber
已设置。
换句话说,如果 noclobber 被设置,那么:
cmd > file
如果文件不存在stdout
,将写入文件cmd > file
如果文件存在将失败cmd >> file
如果文件存在,将附加stdout
到文件cmd >> file
如果文件不存在将失败cmd >! file
将写入stdout
文件,覆盖任何现有文件cmd >>! file
将追加stdout
到文件,如果文件不存在则创建文件如果noclobber
未设置则 ! 没有效果:
cmd > file
将写入stdout
文件,覆盖任何现有文件cmd >> file
将附加stdout
到文件cmd >! file
将写入stdout
文件,覆盖任何现有文件cmd >>! file
将附加stdout
到文件在某些情况下,感叹号会禁止检查正在写入的文件类型。
引用 tcsh 手册页:
如果设置了 shell 变量 noclobber,则该文件不得存在或者是字符特殊文件(例如,终端或“/dev/null”)或错误结果。这有助于防止意外破坏文件。在这种情况下,“!” 可以使用表单来禁止此检查。