分别将stderr和stdout配管 [英] piping stderr and stdout separately

查看:40
本文介绍了分别将stderr和stdout配管的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想对特定命令的stdout和stderr做不同的事情.像

I'd like to do different things to the stdout and stderr of a particular command. Something like

cmd |1 stdout_1 | stdout_2 |2 stderr_1 | stderr_2

其中stdout_x是专门用于stdout的命令,stderr_x是专门用于stderr的命令.可以将 every 命令中的stderr传递到我的stderr命令中,但是最好是严格地使用 cmd 中的stderr.我一直在寻找可能支持此语法的语法,但似乎什么也找不到.

where stdout_x is a command specifically for stdout and stderr_x is specifically for stderr. It's okay if stderr from every command gets piped into my stderr commands, but it's even better if the stderr could be strictly from cmd. I've been searching for some syntax that may support this, but I can't seem to find anything.

推荐答案

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

{ 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

从您的 cmd 中分别 传递stdout和stderr.

to pipe stdout and stderr separately from your cmd.

这篇关于分别将stderr和stdout配管的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆