リダイレクトシーケンスの理解

リダイレクトシーケンスの理解

同時に複数のリダイレクトを使用している場合、順序を変更すると違いが発生しますか?

コマンドの意味を理解する方法は?リダイレクト用のリンクチャネルは、リダイレクトを左から右に、または右から左に読み取るように構成されていますか?

例えば

command 2>&1 > somefile

command > somefile 2>&1

ありがとうございます!

答え1

はい、順序が異なるため、左から右に読む必要があります。

command 2>&1 >somefilestderr(2) を stdout(ターミナル) の現在の宛先にリダイレクトします。次に、stdoutを.soに変更してsomefilestderrが端末に移動し、stdoutがファイルに移動します。

command >somefile 2>&1stdoutをsomefilestdout(ファイル)と同じ宛先にリダイレクトし、次にstderrをstdout(ファイル)にリダイレクトすることを意味します。したがって、stderrとstdoutはどちらもsomefile

これの説明は次のとおりです。Bashマニュアルセクション3.6:リダイレクト

答え2

man bash 

説明する:

リダイレクトコマンドを実行する前に、シェルによって解釈された特殊記号を使用して入力と出力をリダイレクトできます。リダイレクトを使用して、現在のシェルの実行環境でファイルを開いて閉じることもできます。次のリダイレクト演算子は、単純なコマンドの前、またはコマンド内の任意の場所に表示できます。リダイレクトは、表示された順序で左から右に処理されます。

そして

リダイレクトの順序が重要です。たとえば、次のコマンドは

ls > dirlist 2>&1

標準出力と標準エラーをファイルのディレクトリリストとして指定し、コマンドは

ls 2>&1 > dirlist

標準出力をディレクトリリストにリダイレクトする前に標準出力から標準エラーをコピーするので、標準出力をファイルディレクトリリストにのみ送信します。

関連情報