我想对特定命令的 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/

10-15 20:10