bash – 使用进程替换 – 仅将stderr发送到文件
发布时间:2020-12-15 21:49:45 所属栏目:安全 来源:网络整理
导读:出于某种原因,似乎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 st
出于某种原因,似乎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 如果你运行它,输出是这样的:
有谁知道为什么会这样?据我所知,发生的事情是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 $ 显然,要将标准错误传递给文件,您可以在exec 2中使用替代重定向> >(…)脚本的组件. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |