で、このSOスレッドといくつかの他のスレッド私はリダイレクトするため、次のコマンドを見ているstdout
とstderr
、ファイルに。
それらはすべて同等ですか?それらの間に違いはありますか?
command1 >> logfile 2>&1
command &> logfile
command >& logfile
で、このSOスレッドといくつかの他のスレッド私はリダイレクトするため、次のコマンドを見ているstdout
とstderr
、ファイルに。
それらはすべて同等ですか?それらの間に違いはありますか?
command1 >> logfile 2>&1
command &> logfile
command >& logfile
回答:
をタグ付けしたのでzsh
、3つのリダイレクトすべてがまったく同じように機能することを教えてください。あなたは両方の重複投稿(コメントに1つ、あなたのポストの1)で読んだことがあるかもしれませんが、彼らはすべてのリダイレクトがstderr
しstdout
たこれにより、次にファイル「ログファイル」にリダイレクトされる(すなわち、ログファイルが出力され、エラーの両方が含まれています)。
ただし、それらの動作は、使用しているシェルに応じてLOTを変更します。
すべてのリダイレクトの3つのスタイルがで同じようにうまく機能bash
し、zsh
だが:
またはでのみ>&
動作しますcsh
tcsh
[soum@server ~]$ ./test.sh > logfile 2>&1
Ambiguous output redirect.
[soum@server ~]$ ./test.sh &> logfile
Invalid null command.
[soum@server ~]$ ./test.sh >& logfile
[soum@server ~]$ echo $SHELL
/bin/tcsh
[soum@server ~]$
ksh
のみ2>&1
動作します。
$ ./test.sh >& logfile
-ksh: logfile: bad file unit number
$ ./test.sh &> logfile
[1] 23039
$ 1 2 3 4 5 6 logfile test.sh
ls: cannot access ttr: No such file or directory
[1] + Done(2) ./test.sh &> logfile
嫌いksh
です。ながら>&
だけエラーを与え、&>
コマンドの一部をバックグラウンドにし、(空でない場合)ログファイルを空にする。
sh
?POSIXシェルで&>
あり、機能し>&
ない場合。
&>
および>&
半等価性(大麻)zsh
手動リダイレクトのセクションでは、その言葉:
&>
>&
同等です。
どちらもファイルを上書きします。STDIN > file
のみの場合と同様に、ファイルに書き込む前にファイルを0バイトに切り捨てます。
ただし、bash
手動のリダイレクトセクションには以下が追加されます。
2つの形式のうち、最初の形式が優先されます。これは意味的に同等です
>word 2>&1
2番目の形式を使用する場合、wordは数字またはに展開できない場合があり
-
ます。存在する場合、互換性の理由から、他のリダイレクト演算子が適用されます(下記のファイル記述子の複製を参照)。
ですから、をタグ付けしている間はzsh
、bash
スクリプトを記述する場合に最初の形式でフィンガーメモリを取得することをお勧めします。
>> logfile 2>&1
および&>>
等価(追加)ここでlogfile
は、上書きされませんが、ファイルの最後、つまり追加モード(O_APPEND
)で書き込み用に開かれます。
両方{ba,z}sh
で同等のものは次のとおりです。
command1 &>> logfile
でbash
:
標準出力と標準エラーを追加する形式は次のとおりです。
&>>word
これは意味的に同等です
>>word 2>&1
(以下のファイル記述子の複製を参照してください)。
(注:で追加する方法が1つしかないため、上記のセクションで&>
over のclobberの使用を>&
再度お勧めしbash
ます。)
zsh
との両方&>>
を許可し>>&
ます。