如果 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 没有影响。