我如何覆盖 bash 的“noclobber”选项?

我如何覆盖 bash 的“noclobber”选项?

bash noclobber选项可防止使用重定向覆盖文件。但有时我真的很想这样做。csh有一个类似的选项,可以通过在文件名前放置一个来覆盖它!。有什么办法可以做到这一点吗bash

答案1

是的。附加|到重定向运算符以形成>|。这是Bash 参考手册第 3.6.2 节, qv

如果重定向运算符是 '>',并且已启用内置命令 set 的 noclobber 选项,则如果由 word 扩展而得名的文件存在且是常规文件,则重定向将失败。如果重定向运算符是 '>|',或者重定向运算符是 '>' 且未启用 noclobber 选项,则即使 word 命名的文件存在,也会尝试重定向。

访问本教程介绍了 noclobber 选项。也许有帮助。

答案2

在 中使用|("pipe") bash,而不是!中的 ("bang") csh。例如:

echo done >| out

请注意,如果你想重定向stderrstdout override noclobber>|&nor&>|都不起作用;请改用长格式:

cmd-with-errors done >| out 2>&1

相关内容