これを実行すると、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
)