该bash
noclobber
选项可防止使用重定向覆盖文件。但有时我真的很想这样做。csh
有一个类似的选项,可以通过在文件名前放置一个来覆盖它!
。有什么办法可以做到这一点吗bash
?
答案1
是的。附加|
到重定向运算符以形成>|
。这是Bash 参考手册第 3.6.2 节, qv
如果重定向运算符是 '>',并且已启用内置命令 set 的 noclobber 选项,则如果由 word 扩展而得名的文件存在且是常规文件,则重定向将失败。如果重定向运算符是 '>|',或者重定向运算符是 '>' 且未启用 noclobber 选项,则即使 word 命名的文件存在,也会尝试重定向。
访问本教程介绍了 noclobber 选项。也许有帮助。
答案2
在 中使用|
("pipe") bash
,而不是!
中的 ("bang") csh
。例如:
echo done >| out
请注意,如果你想重定向stderr
到stdout
和override noclobber
、>|&
nor&>|
都不起作用;请改用长格式:
cmd-with-errors done >| out 2>&1