该bash noclobber选项可防止使用重定向覆盖文件。但有时我真的很想。csh有一个类似的选项,可以通过!在文件名前放置 a 来覆盖它。有没有办法做到这一点bash?
Jde*_*eBP 20
是的。附加|到重定向运算符以形成>|. 这是在Bash 参考手册的第 3.6.2 节,qv
如果重定向运算符是“>”,并且已启用 set 内置的 noclobber 选项,如果名称由单词扩展产生的文件存在并且是常规文件,则重定向将失败。如果重定向运算符为“>|”,或者重定向运算符为“>”且未启用 noclobber 选项,则即使以 word 命名的文件存在,也会尝试重定向。
访问有关 noclobber 选项的教程。它可能有帮助。
在 中使用|("pipe") bash,而不是像!在 中那样使用 ("bang") csh。例如:
echo done >| out
Run Code Online (Sandbox Code Playgroud)
请注意,如果您想重定向stderr到stdout 并覆盖noclobber,则>|&或 都&>|不起作用;请改用长形式:
cmd-with-errors done >| out 2>&1
Run Code Online (Sandbox Code Playgroud)