2

この 2 つの bash コマンドの違いは何ですか: 1. printf "somthing wrong!%v" おっと! > dumpz 2>&1 2. printf "何かがおかしい!%v" おっと! 2>&1 > dumpz 最初のスクリプトを使用すると、両方のストリームがファイル (dumpz) に保存されます。2番目のスクリプトを使用すると、stdoutのみがファイルに入り、stderrがターミナルに表示されます。

別の質問は、最初のスクリプトでストリームのシーケンスが正しくない理由です。つまり、ファイルの最初の行には stderr が含まれ、2 番目の行には stdout が含まれています。このストリームのバックグラウンドで実際に行われたことについて、助けが必要です。OSが実際に実行するもの(ポインタ、メモリなど)を意味します。

4

2 に答える 2

2

リダイレクトの適用は指定した順序で行われるため、最初のケースでは

printf "somthing wrong!%v" Oops! > dumpz 2>&1

最初にstdoutをファイルにリダイレクトし、次にstderrをstdoutの宛先であるファイルにリダイレクトします。

2番目のケースでは

printf "somthing wrong!%v" Oops! 2>&1 > dumpz

最初に stderr を stdout の宛先 (現在は端末) にリダイレクトします。次に、stdout をファイルにリダイレクトします。

于 2013-10-24T13:44:37.187 に答える
0

Order is pretty important in these redirections.

printf "somthing wrong!%v" Oops! > dumpz 2>&1 

will redirect stdout to dumpz file and then redirect stderr to wherever stdout is redirected.

But this command:

printf "somthing wrong!%v" Oops! 2>&1 > dumpz 

will first redirect stderr to wherever stdout is redirected (tty or terminal) and then redirect stdout to dumpz file .

于 2013-10-24T13:44:45.653 に答える