2017-06-24 7 views
0

私はLinuxのシェルスクリプト(bourne、bash)で標準とエラーのリダイレクションの細かい点を理解しようとしています。組み合わされた場合、Linuxシェル標準出力とエラー出力リダイレクトはどのように機能しますか?

例1:

cat file1 > output.txt 

又は

cat file1 1> output.txt 

これはOUTPUT.TXTするFILE1の内容をリダイレクトします。期待どおりに動作します。


例2:

kat file1 2> output.txt 

KATコマンドはそれほど誤差がOUTPUT.TXTにリダイレクトされて存在していません。期待どおりに動作します。


例3:

cat file1 2>&1 output.txt 

猫が有効なコマンドとfile1が存在しているので、ここで私が代わりに私が画面に両方のファイルの内容を取得するように見える例1と同じ動作を期待します。


例4:( ":KAT:コマンドが見つかりません-bash")

kat file1 2>&1 output.txt 

KATが存在しないため、私は例2と同じ動作を期待する代わりに、私は画面にエラーが発生します多くのオンラインマニュアルで説明したように

、例えば:

https://www.gnu.org/software/bash/manual/html_node/Redirections.html
+0

3番目と4番目の例では、実際に何が起きるかはわかりませんが、期待していることを教えてください。あなたの期待するだけでなく、あなたの質問に*実際の*動作を含めてください。 –

+0

追加されます。 –

答えて

3

問題が2>&1のみをリダイレクトするようにシェルに指示することですファイル記述子2(標準エラー)をファイル記述子1(標準出力)に出力します。実際には標準出力のリダイレクトは行われません。そのために

はあなたが が最後(標準出力のリダイレクト後)、または、それは動作しません記述子-リダイレクトを行う必要があり

cat file1 > output.txt 2>&1 

ノートのように明示的にそれをしなければなりません。

これはすべてthe Bash manual pagethe section about redirection参照)で説明されています。

1
cat file1 2>&1 output.txt 

シェルはリダイレクトを設定します(stderrをstdoutに設定します)。その後、シェルによって実行されるコマンドとして "left"が表示されます。

cat file1 output.txt 

その理由は、両方の内容を見る理由です。シェルコマンドを実行するための記述子を設定した後にのみ

kat file1 output.txt 

が残っているので

kat file1 2>&1 output.txt 

について

それは同じです。これはシェルからのエラーメッセージでは見つかりません。

関連する問題