使用进程替换,仅发送 stderr 到进程

使用进程替换,仅发送 stderr 到进程

我有这个:

exec > >( while read line; do echo " stdout: $line"; done )
exec 2> >( while read line; do echo " stderr: $line"; done )

echo "rolo"
>&2 echo "cholo"

如果运行该脚本,则会产生以下输出:

标准输出:rolo
标准输出:stderr:cholo

我怎样才能只将 stderr 发送到第二个进程替换行?我不明白。

我不明白为什么会发生这种情况:

标准输出:rolo
标准输出:stderr:cholo # 什么哈哈

答案1

您以错误的顺序设置了重定向。第二个进程替换(以 为前缀stderr:)的标准输出的标准输出以第一个进程替换为前缀,因为它是在之后运行的。

试试这个:

exec 2> >( while read line; do echo " stderr: $line"; done )
exec > >( while read line; do echo " stdout: $line"; done )

echo "rolo"
echo "cholo" >&2

这输出

 stderr: cholo
 stdout: rolo

我想这就是你想要的。

相关内容