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

bash – 分别管道stderr和stdout

发布时间:2020-12-15 21:18:15 所属栏目:安全 来源:网络整理
导读:我想对特定命令的stdout和stderr做不同的事情.就像是 cmd |1 stdout_1 | stdout_2 |2 stderr_1 | stderr_2 其中stdout_x是专门用于stdout的命令,stderr_x专门用于stderr.如果每个命令的stderr都被管道输入到我的stderr命令中,那也没关系,但如果stderr可以严
我想对特定命令的stdout和stderr做不同的事情.就像是

cmd |1 stdout_1 | stdout_2 |2 stderr_1 | stderr_2

其中stdout_x是专门用于stdout的命令,stderr_x专门用于stderr.如果每个命令的stderr都被管道输入到我的stderr命令中,那也没关系,但如果stderr可以严格来自cmd,那就更好了.我一直在寻找可能支持这一点的语法,但我似乎找不到任何东西.

解决方法

您可以使用不同的文件描述符:

{ cmd 2>&3 | stdout_1; } 3>&1 1>&2 | stderr_1

例:

{ { echo 'out'; echo >&2 'error'; } 2>&3 | awk '{print "stdout: " $0}'; } 3>&1 1>&2 |
  awk '{print "stderr: " $0}'
stderr: error
stdout: out

或者使用进程替换:

cmd 2> >(stderr_1) > >(stdout_1)

例:

{ echo 'out'; echo >&2 'error'; } 2> >(awk '{print "stderr: " $0}') 
> >(awk '{print "stdout: " $0}')
stderr: error
stdout: out

将stdout和stderr与cmd分开管道.

(编辑:李大同)

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

    推荐文章
      热点阅读