分别将stderr和stdout配管 [英] piping stderr and stdout separately
问题描述
我想对特定命令的stdout和stderr做不同的事情.像
I'd like to do different things to the stdout and stderr of a particular command. Something like
cmd |1 stdout_1 | stdout_2 |2 stderr_1 | stderr_2
其中stdout_x是专门用于stdout的命令,stderr_x是专门用于stderr的命令.可以将 every 命令中的stderr传递到我的stderr命令中,但是最好是严格地使用 cmd
中的stderr.我一直在寻找可能支持此语法的语法,但似乎什么也找不到.
where stdout_x is a command specifically for stdout and stderr_x is specifically for stderr. It's okay if stderr from every command gets piped into my stderr commands, but it's even better if the stderr could be strictly from cmd
. I've been searching for some syntax that may support this, but I can't seem to find anything.
推荐答案
您可以使用不同的文件描述符:
{ 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
从您的 cmd
中分别 传递stdout和stderr.
to pipe stdout and stderr separately from your cmd
.
这篇关于分别将stderr和stdout配管的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!