加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-15 17:02:37 所属栏目:安全 来源:网络整理
导读:我正在组建一个复杂的管道,我想在程序输出中包含stderr以便记录,但我也希望错误保留在stderr上,这样我就能发现问题. 我发现this question询问如何将stdout stderr指向一个文件并仍在终端上获得stderr;它很接近,但我不想将stdout重定向到一个文件:程序的输出
我正在组建一个复杂的管道,我想在程序输出中包含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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读