我在 .bashrc 中将 bash 设置为 noclobber 模式 - 来自 bash 手册页:
设置 [--abefhkmnptuvxBCHP] [-o 选项] [arg ...] ... -C 如果设置,bash 不会覆盖现有文件 >、>& 和重定向运算符。这可能是 使用创建输出文件时被覆盖 重定向运算符 >| 而不是>。
有时我想覆盖此行为,因此我使用>|
重定向运算符来执行此操作。但有时我想将 stdout和stderr 都重定向到一个文件。该文件可能已经存在,所以我可能想破坏这个文件。鉴于记录的运算符>&
and >|
,我希望还有一个>|&
or >&|
or&>|
运算符,它将 stdout 和 stderr 重定向到文件,并进行强制覆盖。但我找不到这样一个运营商:
$ ls file.txt missing
ls: missing: No such file or directory
file.txt
$ ls file.txt missing >& output.txt
bash: output.txt: cannot overwrite existing file
$ ls file.txt missing >&| output.txt
bash: syntax error near unexpected token `|'
$ ls file.txt missing >|& output.txt
bash: syntax error near unexpected token `&'
$ ls file.txt missing &>| output.txt
bash: syntax error near unexpected token `|'
$
我知道我可以用>|
and的组合来做到这一点2>&1
,但宁愿用一个运算符来做到这一点:
$ ls file.txt missing >| output.txt 2>&1
$ cat output.txt
ls: missing: No such file or directory
file.txt
$
这样的运营商是否存在、记录在案或以其他方式存在?
我注意到我所询问的内容似乎有一点优先级 - 特别是在这些运算符的“附加”版本中。在 bash 4 中,&>>
引入了运算符,它允许将 stdout和stderr 附加到输出文件中。但似乎没有“clobber”版本。 如何使用 Bash 将 stdout 和 stderr 重定向并附加到文件中?