同時に複数のリダイレクトを使用している場合、順序を変更すると違いが発生しますか?
コマンドの意味を理解する方法は?リダイレクト用のリンクチャネルは、リダイレクトを左から右に、または右から左に読み取るように構成されていますか?
例えば
command 2>&1 > somefile
command > somefile 2>&1
ありがとうございます!
答え1
はい、順序が異なるため、左から右に読む必要があります。
command 2>&1 >somefile
stderr(2) を stdout(ターミナル) の現在の宛先にリダイレクトします。次に、stdoutを.soに変更してsomefile
stderrが端末に移動し、stdoutがファイルに移動します。
command >somefile 2>&1
stdoutをsomefile
stdout(ファイル)と同じ宛先にリダイレクトし、次にstderrをstdout(ファイル)にリダイレクトすることを意味します。したがって、stderrとstdoutはどちらもsomefile
。
これの説明は次のとおりです。Bashマニュアルセクション3.6:リダイレクト。
答え2
man bash
説明する:
リダイレクトコマンドを実行する前に、シェルによって解釈された特殊記号を使用して入力と出力をリダイレクトできます。リダイレクトを使用して、現在のシェルの実行環境でファイルを開いて閉じることもできます。次のリダイレクト演算子は、単純なコマンドの前、またはコマンド内の任意の場所に表示できます。リダイレクトは、表示された順序で左から右に処理されます。
そして
リダイレクトの順序が重要です。たとえば、次のコマンドは
ls > dirlist 2>&1
標準出力と標準エラーをファイルのディレクトリリストとして指定し、コマンドは
ls 2>&1 > dirlist
標準出力をディレクトリリストにリダイレクトする前に標準出力から標準エラーをコピーするので、標準出力をファイルディレクトリリストにのみ送信します。