zsh I/O リダイレクト: まず、リダイレクトしてからパイプを実行します。

zsh I/O リダイレクト: まず、リダイレクトしてからパイプを実行します。

誰かがこのコマンドで何が起こっているのか説明できますか?

echo foo >&2 | grep foo

Zsh(5.0.2)はfoo2回印刷します。次のコマンドを実行した後、1つは標準出力として表示され、もう1つは標準エラーとして表示されます。

{ echo foo >&2 | grep foo } >/dev/null

そして:

{ echo foo >&2 | grep foo } 2>/dev/null

両方ともfoo一度だけ印刷されます。

答え1

これが効果です多数

echo foo >&2 | grep foo

foostderrに書き込まれ、にfooパイプされますgrep。 stderrはデフォルトで端末に接続されているため、それぞれfooに1つ、echo結果に1つ、2行が表示されますgrep

{ echo foo >&2 | grep foo } >/dev/null

stdoutがにリダイレクトされたため、ここに行が表示されます。の行のみ/dev/nullが表示されます。fooecho

{ echo foo >&2 | grep foo } 2>/dev/null

ここでは、stderrがにリダイレクトされているので、1行を見ることができ、その行だけを見ることができます/dev/nullfoogrep

ライン出力色により、端末の違いを簡単に知ることができます。grep一致するパターンが強調表示されます(または強制的に使用可能--color=always)。


MULTIOSデフォルトでは有効ですが、nomultiosオプションは設定されていません。

$ unsetopt | grep nomultios
nomultios

無効にするには、nomultios次のオプションを設定します。

$ setopt nomultios

関連情報