HappyFace Asked: 2018-11-23 12:50:06 +0800 CST2018-11-23 12:50:06 +0800 CST 2018-11-23 12:50:06 +0800 CST 这些 MULTIOS 重定向中发生了什么? 772 当我运行时1>&2 echo hi |& grep hi,我得到一个非彩色的 hi,然后在新的一行上得到一个红色的 hi。这与 的输出相同1>&2 echo hi | grep hi。为什么前者的两个“hi”都不是红色的? zsh shell 1 个回答 Voted Best Answer Kusalananda 2018-11-23T15:51:27+08:002018-11-23T15:51:27+08:00 你的第一个管道: 1>&2 echo hi |& grep hi 这与 echo hi 1>&2 2>&1 | grep hi 因为|&与 相同2>&1 |。 设置MULTIOSshell 选项后,这会将 的输出复制echo到标准错误。hi这产生了grep从未见过的无色。另一个hi穿过grep并着色。 2>&1重定向不执行任何操作,因为没有输出到标准错误echo。如果你有例如,那会有所不同 { echo hi 1>&2; } 2>&1 | grep hi 或者 { echo hi 1>&2; } |& grep hi 其中标准输出 fromecho不会被复制并且标准错误{ ...; }将被发送到grep,产生一个单一的彩色hi。 你的第二条管道, 1>&2 echo hi | grep hi 或者, echo hi 1>&2 | grep hi 2>&1(这与删除了无操作重定向的第一个管道相同)也将标准输出重定向两次;一次是标准错误(无色hi),一次是管道(有色hi)。 对于两个彩色hi的: echo hi 2>&1 1>&2 | grep hi 或者 echo hi 1>&1 | grep hi (因为我不太习惯zsh外壳,所以需要一点点挥手)
你的第一个管道:
这与
因为
|&
与 相同2>&1 |
。设置
MULTIOS
shell 选项后,这会将 的输出复制echo
到标准错误。hi
这产生了grep
从未见过的无色。另一个hi
穿过grep
并着色。2>&1
重定向不执行任何操作,因为没有输出到标准错误echo
。如果你有例如,那会有所不同或者
其中标准输出 from
echo
不会被复制并且标准错误{ ...; }
将被发送到grep
,产生一个单一的彩色hi
。你的第二条管道,
或者,
2>&1
(这与删除了无操作重定向的第一个管道相同)也将标准输出重定向两次;一次是标准错误(无色hi
),一次是管道(有色hi
)。对于两个彩色
hi
的:或者
(因为我不太习惯
zsh
外壳,所以需要一点点挥手)