我想对特定命令的 stdout 和 stderr 做不同的事情。就像是
cmd |1 stdout_1 | stdout_2 |2 stderr_1 | stderr_2
其中 stdout_x 是专门用于 stdout 的命令,而 stderr_x 专门用于 stderr。如果来自每个命令的 stderr 都通过管道传输到我的 stderr 命令中,那没关系,但如果 stderr 可以严格来自
cmd
就更好了。我一直在寻找一些可能支持这一点的语法,但我似乎找不到任何东西。 最佳答案
您可以使用 不同的文件描述符 :
{ cmd 2>&3 | stdout_1; } 3>&1 1>&2 | stderr_1
示例:
{ { echo 'out'; echo >&2 'error'; } 2>&3 | awk '{print "stdout: " $0}'; } 3>&1 1>&2 |
awk '{print "stderr: " $0}'
stderr: error
stdout: out
或者使用 进程替换 :
cmd 2> >(stderr_1) > >(stdout_1)
示例:
{ echo 'out'; echo >&2 'error'; } 2> >(awk '{print "stderr: " $0}') \
> >(awk '{print "stdout: " $0}')
stderr: error
stdout: out
将 stdout 和 stderr 从您的
cmd
中分别通过管道传输 。关于bash - 分别管道 stderr 和 stdout,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27673595/