在正常的bash重定向>
中将标准输出重定向到文件,在存在时覆盖并>>
将标准输出重定向到文件,在存在时附加。
在tcsh(c shell)脚本中,我发现正在使用运算符>!
>>!
。这个运营商做了什么? tcsh也有>
和>>
运算符,那有什么区别?
答案 0 :(得分:34)
在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
追加到 file cmd >! file
会将stdout
写入文件,覆盖任何现有文件cmd >>! file
会将stdout
追加到 file 答案 1 :(得分:3)
在某些情况下,感叹号会禁止检查要写入的文件类型。
引用tcsh手册页:
如果设置了shell变量noclobber,则该文件不能存在或者是字符特殊文件(例如,终端或'/ dev / null')或错误结果。这有助于防止意外破坏文件。在这种情况下,'!'表单可用于抑制此检查。