MULTIOSリダイレクトでは何が起こっていますか?

MULTIOSリダイレクトでは何が起こっていますか?

これを実行すると、1>&2 echo hi |& grep hi色のないhiが表示され、新しい行に赤いhiが表示されます。これは同じ出力です1>&2 echo hi | grep hi。前者の2つの「こんにちは」が赤ではないのはなぜですか?

答え1

最初のパイプライン:

1>&2 echo hi |& grep hi

これは以下に関連しています。

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

|&と同じだからです2>&1 |

シェルオプションが設定されると、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

2番目のパイプ、

1>&2 echo hi | grep hi

または、

echo hi 1>&2 | grep hi

(これはランダムリダイレクト用の最初のパイプを削除するのと同じです。2>&1)また、標準出力を2回リダイレクトします。一度は標準エラー(色なしhi)で、一度はパイプ(色付きhi)にリダイレクトします。

2つの色の場合hi

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

または

echo hi 1>&1 | grep hi

(私はシェルに慣れていないので少し揺れが必要ですzsh

関連情報