zsh に multios が存在する場合、「&>word」と「>word 2>&1」の違いは何ですか?

zsh に multios が存在する場合、「&>word」と「>word 2>&1」の違いは何ですか?

〜のように手動説明する:

これは、複数のオペレーティングシステムがある場合は ""とは異なる効果があることに注意してください> word 2>&1(以下のセクションを参照)。

しかし、マルチオス部分を読んだ後も、2つの違いはまだわかりません。誰でも例をあげることができますか?

答え1

問題は、各インスタンスの2>&1ためにstderrがすでに完了したstdoutにリダイレクトされることです。この例をご覧くださいマルチオペレーティングシステム部分:

ただし、次の点を考慮してください。

date >output >&1

リダイレクトは順次評価されるため、発生する>&1と標準出力がファイル出力に設定されるため、出力の別のコピーがそのファイルに送信されます。これは私たちが望むものではないようです。

そして具体的な問題を説明する例を見てください。

% (echo foo; echo bar >&2) &> baz &> baz2
% head baz baz2
==> baz <==
foo
bar

==> baz2 <==
foo
bar

ここでは、各行は各ファイルに一度表示されます。これはおそらくこれらのリダイレクトの目的です。

> word 2>&1ただし、次に直接変更してください&> word

% (echo foo; echo bar >&2) > baz 2>&1 > baz2 2>&1
% head baz baz2
==> baz <==
foo
bar
bar

==> baz2 <==
foo
bar

最初のファイルに送信された追加のstderrコピーを確認してください。

したがって、等価物&> word1 &> word2 &> word3 ...は実際に> word1 > word2 > word3 ... 2>&1

関連情報