で、この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
だが:
またはでのみ>&動作しますcshtcsh
[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>&12番目の形式を使用する場合、wordは数字またはに展開できない場合があり
-ます。存在する場合、互換性の理由から、他のリダイレクト演算子が適用されます(下記のファイル記述子の複製を参照)。
ですから、をタグ付けしている間はzsh、bashスクリプトを記述する場合に最初の形式でフィンガーメモリを取得することをお勧めします。
>> logfile 2>&1および&>>等価(追加)ここでlogfileは、上書きされませんが、ファイルの最後、つまり追加モード(O_APPEND)で書き込み用に開かれます。
両方{ba,z}shで同等のものは次のとおりです。
command1 &>> logfile
でbash:
標準出力と標準エラーを追加する形式は次のとおりです。
&>>wordこれは意味的に同等です
>>word 2>&1(以下のファイル記述子の複製を参照してください)。
(注:で追加する方法が1つしかないため、上記のセクションで&>over のclobberの使用を>&再度お勧めしbashます。)
zshとの両方&>>を許可し>>&ます。