这些 MULTIOS 重定向中发生了什么?

这些 MULTIOS 重定向中发生了什么?

当我运行时1>&2 echo hi |& grep hi,我会得到一个非彩色的 hi,然后在新的一行上出现一个红色的 hi。这与 的输出相同1>&2 echo hi | grep hi。为什么前者的两个“hi”不是红色的?

答案1

您的第一个管道:

1>&2 echo hi |& grep hi

这与

echo hi 1>&2 2>&1 | grep hi

因为|&与 相同2>&1 |

设置 shell 选项后MULTIOS,这会将 的输出复制echo到标准错误。这会产生从未见过hi的无色物体grep。另一个hi穿过grep并着色。

重定向2>&1不会执行任何操作,因为 . 没有输出到标准错误echo。如果你有例如,情况会有所不同

{ echo hi 1>&2; } 2>&1 | grep hi

或者

{ echo hi 1>&2; } |& grep hi

标准输出echo将在哪里不是被复制,并且 的标准错误{ ...; }将被发送到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

(这需要一点点挥手,因为我不太习惯 shell zsh

相关内容