我有一个管道正在做
command1 | command2
因此, command1 的 stdout 转到 command2 ,而 command1 的 stderr 转到终端(或 shell 的 stdout 所在的任何地方)。
如何将 command1 的 stderr 通过管道传输到第三个进程(command3
)而 stdout 仍然会转到 command2 ?
使用另一个文件描述符
{ command1 2>&3 | command2; } 3>&1 1>&2 | command3
您最多可以使用 7 个其他文件描述符:从 3 到 9。
如果您需要更多解释,请询问,我可以解释;-)
Test
{ { echo a; echo >&2 b; } 2>&3 | sed >&2 's/$/1/'; } 3>&1 1>&2 | sed 's/$/2/'
output:
b2
a1
Example
生成两个日志文件:
1. stderr
only
2. stderr
and stdout
{ { { command 2>&1 1>&3; } | tee err-only.log; } 3>&1; } > err-and-stdout.log
If command
is echo "stdout"; echo "stderr" >&2
然后我们可以这样测试它:
$ { { { echo out>&3;echo err>&1;}| tee err-only.log;} 3>&1;} > err-and-stdout.log
$ head err-only.log err-and-stdout.log
==> err-only.log <==
err
==> err-and-stdout.log <==
out
err
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)