微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

bash – 如何将错误输出重定向到stdout和stderr?

我正在组建一个复杂的管道,我想在程序输出中包含stderr以便记录,但我也希望错误保留在stderr上,这样我就能发现问题.

我发现this question询问如何将stdout stderr指向一个文件并仍在终端上获得stderr;它很接近,但我不想将stdout重定向一个文件:程序的输出将被其他脚本使用,所以我希望它保留在stdout上(对于stderr也是如此).所以,总结一下:

>脚本在fd 1中生成输出,在fd 2中生成错误.
>我希望调用程序重新排列事物,以便输出错误出现在fd 1中,错误出现在fd 2中.
>此外,错误应与输出交错(尽可能与自己的缓冲允许),最后不保存和添加.

尽职调查:使用2>& 1捕获stderr非常容易.通过T形管道保存和查看标准输出很容易.我也知道如何将stdout转移到文件并通过管道直接stderr:命令2>& 1 1> fileA |发球文件B.但是我如何复制stderr并将stdout放回fd 1?

作为生成stdout和stderr的测试,让我们使用以下内容
{ echo out; echo err >&2; }

以下代码演示了如何将stdout和stderr发送到管道中的下一步,同时还将stderr发送到终端:

${ echo out; echo err >&2; } 2> >(tee /dev/stderr) | cat >f
err
$cat f
out
err

这个怎么运作

> 2>

这会将stderr重定向到后面的(伪)文件.
>>(tee / dev / stderr)

这是进程替换,它充当从stderr接收输入的伪文件.它接收的任何输入都被发送到tee命令,该命令将它发送到stderr和stdout.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐