2

我在 .bashrc 中将 bash 设置为 noclobber 模式 - 来自 bash 手册页:

       设置 [--abefhkmnptuvxBCHP] [-o 选项] [arg ...]
...
              -C 如果设置,bash 不会覆盖现有文件
                      >、>& 和重定向运算符。这可能是
                      使用创建输出文件时被覆盖
                      重定向运算符 >| 而不是>。

有时我想覆盖此行为,因此我使用>|重定向运算符来执行此操作。但有时我想将 stdoutstderr 都重定向到一个文件。该文件可能已经存在,所以我可能想破坏这个文件。鉴于记录的运算符>&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 中,&>>引入了运算符,它允许将 stdoutstderr 附加到输出文件中。但似乎没有“clobber”版本。 如何使用 Bash 将 stdout 和 stderr 重定向并附加到文件中?

4

1 回答 1

2

恐怕不是。您必须使用>|...2>&1解决方案。

于 2013-11-12T19:17:58.123 回答