私が入力している間
cat some_file > new_file1 > new_file2
some_file
inと空白からnew_file2
出力を取得しますnew_file1
。
これの内部ロジックは何ですか?具体的には、stdout
ファイルの内容は何ですか?
注:Windowsでは中間ファイルをスキップします。
答え1
シェルによって異なります。
Bashはecho derp >file1 >file2
最初に開いて切り取り、次にofを作成file1
する準備をします。その後、bashは次の操作を行います。つまり、開き、切り取り、of がwrite の代わりに書かれるように準備します。stdout
echo derp
file1
file2
file2
stdout
echo derp
file2
最終的な効果は、切り捨てられたfile1
(つまりコンテンツが削除された)リンクがstdout
発生しないことですfile2
。 Bashは標準出力を一度に1つの場所にのみリダイレクトできます。パイプの場合も同様です。echo derp > file | cat
「derp」の結果は、パイプではなくファイルに書き込まれます。
ただし、zshでは直感的に予想されるように、およびecho derp >file1 >file2
が同時に作成されますfile1
。 zshを使用している場合は、file2
詳細についてはMULTIOSを参照してください。man zshmisc
これを外部で達成するには、次のようにzsh
しますtee
。echo derp | tee file1 file2 > /dev/null
zshと同じですecho derp >file1 >file2
。