〜のように手動説明する:
これは、複数のオペレーティングシステムがある場合は ""とは異なる効果があることに注意してください
> 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
。