ale*_*xis 5 bash io-redirection
我正在组建一个复杂的管道,我想在程序输出中包含stderr以便记录,但我也希望错误保留在stderr上,这样我就能发现问题.
我发现这个问题询问如何将stdout + stderr指向一个文件并仍然在终端上获得stderr; 它很接近,但我不想将stdout重定向到一个文件:程序的输出将被其他脚本使用,所以我希望它保留在stdout上(对于stderr也是如此).所以,总结一下:
尽职调查:捕捉stderr很容易2>&1.通过管道输出可以轻松保存和查看标准输出tee.我也知道如何将stdout转移到文件并通过管道直接stderr:command 2>&1 1>fileA | tee fileB.但是如何复制stderr并将stdout放回fd 1?
作为生成 stdout 和 stderr 的测试,让我们使用以下命令:
{ echo out; echo err >&2; }
Run Code Online (Sandbox Code Playgroud)
以下代码演示了如何将 stdout 和 stderr 发送到管道中的下一步,同时还将 stderr 发送到终端:
$ { echo out; echo err >&2; } 2> >(tee /dev/stderr) | cat >f
err
$ cat f
out
err
Run Code Online (Sandbox Code Playgroud)
2>
这会将 stderr 重定向到后面的(伪)文件。
>(tee /dev/stderr)
这是进程替换,它充当从 stderr 接收输入的伪文件。它接收到的任何输入都会发送到tee命令,该命令将其发送到 stderr 和 stdout。