一尘不染

仅将STDERR通过过滤器输送

linux

在bash中,是否可以通过STDOUT将STDERR通过过滤器传递给管道?那就是我想要

STDOUT ────────────────┐
                       ├─────> terminal/file/whatever
STDERR ── [ filter ] ──┘

而不是

STDOUT ────┐
           ├────[ filter ]───> terminal/file/whatever
STDERR ────┘

阅读 283

收藏
2020-06-02

共1个答案

一尘不染

这是一个示例,以如何在bash中交换文件描述符为模型。以下是a.out的输出,不带’STDXXX:’前缀。

STDERR: stderr output
STDOUT: more regular

./a.out 3>&1 1>&2 2>&3 3>&- | sed 's/e/E/g'
more regular
stdErr output

从以上链接引用:

  1. 首先将标准输出另存为&3(&1分为3)
  2. 接下来将stdout发送到stderr(&2被复制为1)
  3. 将stderr发送到&3(stdout)(&3被分成2个)
  4. 关闭&3(&-分为3)
2020-06-02