出于某种原因,似乎stderr在以下bash脚本中被发送到stdout:
exec > >( while read line; do echo " stdout: $line"; done ) exec 2> >( while read line; do echo " stderr: $line"; done ) echo "rolo" echo "cholo" >&2
如果你运行它,输出是这样的:
stdout: rolo
stdout: stderr: cholo
有谁知道为什么会这样?据我所知,发生的事情是stderr被发送到stdout,这就是为什么第一行是从第二行捕获输出的原因?
解决方法
是 – 您的标准错误正在发送到标准输出.这就是你要求发生的事情.
你的执行官2> >(…)脚本回显到stdout,所以exec> >(…)脚本也可以看到它 – 这就是你在cholo输出行上同时拥有stdout和stderr标签的原因.
将脚本(bash17.sh)修改为:
exec > >( while read line; do echo " stdout: $line"; done ) exec 2> >( while read line; do echo " stderr: $line"; done >&2 ) echo "rolo" echo "cholo" >&2
$bash bash17.sh stdout: rolo stderr: cholo $bash bash17.sh > /dev/null stderr: cholo $bash bash17.sh 2> /dev/null stdout: rolo $
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。