“2>&1”和“>”有什么区别?

ran*_*ien 2 linux redirection command-line

如果 2>&1 将 stderr 重定向到 stdout,那不是 '>' 所做的吗?那么“2>&1”和“>”具有相同的含义还是在某些方面有所不同?关于重定向的解释似乎围绕着它们各自含义之间的差异,但没有说明“2>&1”和“>”是否相同。有人可以告诉我我错在哪里吗?

Mok*_*bai 5

>有其本身的意义。它是一个重定向运算符。

2>可能是重定向stderr,但stderr不是任务的唯一输出。还有stdoutwhich is 1,还有其他你可以重定向到的地方。

例如,>myOutput.txt会将输出(我相信仅stdout默认情况下)从该任务重定向到您的文件。

然后是1>stdOut.txt显式 stdout重定向到输出文件。

通过扩展,你也可以这样做2>stdErr.txt

这样做的原因2>&1是重定向stderr到相同的流,stdout以便只有一个流作为命令的输出。然后,可以将组合输出重定向为一个命令。

所以而不是

myCommand 1>stdOut.txt 2>stdErr.txt
Run Code Online (Sandbox Code Playgroud)

你可以做

myCommand 1>combinedOut.txt  2>&1 
Run Code Online (Sandbox Code Playgroud)