' 2>&1 ' 和 '>' 之间有什么区别?

' 2>&1 ' 和 '>' 之间有什么区别?

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

答案1

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

2>可能正在重定向stderr,但这stderr不是任务的唯一输出。还有stdout哪个是 1,还有您可以重定向到的其他地方。

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

然后是1>stdOut.txt明确重定向仅有的 stdout到输出文件。

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

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

因此,而不是

myCommand 1>stdOut.txt 2>stdErr.txt

你可以做

myCommand 1>combinedOut.txt  2>&1 

答案2

因此,而不是

myCommand 1>stdOut.txt 2>stdErr.txt

你可以做

myCommand 2>&1 1>combinedOut.txt

...这并不完全正确...如果您想将 stderr 和 stdout 发送到同一个地方,则2>&1必须在命令末尾使用。

这里,stderr 被发送到您的 stdout 而不是重定向(控制台),并且 stdout 被发送到文件而对 stderr 没有影响。

相关内容