一連のリダイレクトを理解する


8

複数のリダイレクトが一緒に使用される場合、それらの順序を変更すると違いがありますか?

彼らの命令の意味をどのように理解するでしょうか?リダイレクトのチェーンチャネルは、左から右、または右から左にリダイレクトを読み取るように構築されていますか?

例えば

command 2>&1 > somefile

command > somefile 2>&1

よろしくお願いします!

回答:


7

はい、順序は違います。左から右に読む必要があります。

command 2>&1 >somefilestderr(2)をstdout(端末)の現在の宛先にリダイレクトすることを意味します。次にstdoutを変更してに移動しsomefileます。したがって、stderrは端末に行き、stdoutはファイルに行きます。

command >somefile 2>&1stdoutをにリダイレクトしsomefile、次にstderrをstdout(ファイル)と同じ宛先にリダイレクトすることを意味します。したがって、stderrとstdoutの両方がに移動しsomefileます。

これについては、Bashマニュアルのセクション3.6「リダイレクト」で説明されています


1
man bash 

言う:

REDIRECTIONコマンドが実行される前に、その入力と出力は、シェルによって解釈される特別な表記法を使用してリダイレクトされます。リダイレクトは、現在のシェル実行環境のファイルを開いたり閉じたりするためにも使用できます。次のリダイレクト演算子は、単純なコマンド内のどこにでも先行または出現したり、コマンドの後に続く場合があります。リダイレクションは、左から右に表示される順序で処理されます。

そして

リダイレクトの順序は重要であることに注意してください。たとえば、次のコマンド

ls > dirlist 2>&1

標準出力と標準エラーの両方をファイルdirlistに送信し、コマンド

ls 2>&1 > dirlist

標準出力がdirlistにリダイレクトされる前に標準出力から標準エラーが複製されたため、標準出力のみをファイルdirlistに送信します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.