我有这个:
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
我想这就是你想要的。