据我了解,2>&1
仅表示“将stderr发送到与stdout相同的位置”。但是由于某些原因,1>foo 2>foo
和1>foo 2>&1
似乎并不等效。
# Assuming file 'out' exists but file 'nosuchfile' doesn't
# 'foo' contains stdout and some partial stderr in CentOS 6
$ ls -l out nosuchfile 1>foo 2>foo
$ cat foo
-rw-r--r-- 1 user user 0 May 14 14:45 out
ctory
# 'foo' contains both stdout and stderr
$ ls -l out nosuchfile 1>foo 2>&1
$ cat foo
ls: cannot access nosuchfile: No such file or directory
-rw-r--r-- 1 user user 0 May 14 14:45 out
谁能解释为什么他们的行为有所不同?
答案 0 :(得分:0)
>
覆盖文件; >>
附加到文件。
当您编写1> file
和 2> file
时,两个流都将并行覆盖file
,因此可能会相互覆盖-一种典型的竞争条件。
command 1>> file 2>> file
应该保留两个流的所有输出。
示例:
$ n=1""000""000
$ (seq "$n" 1>&2 & seq "$n") 1> o 2> o
$ wc -l o
1000000
$ rm o
$ (seq "$n" 1>&2 & seq "$n") 1>> o 2>> o
wc -l o
2000000