Windows system >> Windowsの知識 >  >> Linuxシステムチュートリアル >> Linuxチュートリアル >> LINUXシェルに「2>& 1」と表示されるのはなぜですか?

LINUXシェルに「2>& 1」と表示されるのはなぜですか?

  

特にcrontab

./t.sh> /devを呼び出すときに、スクリプトによっては次の形式のコマンド呼び出しが見つかることがよくあります。 /null 2>& 1 ./t.sh> /dev /nullの前半はわかりやすいので、2> 1の背後には何があるのでしょうか。

この問題を説明するには、ファイルのリダイレクトについて言及する必要があります。 >と<がファイルのリダイレクトであることはわかっています。それで、1と2は何ですか?シェルでは、各プロセスは、標準入力stdin、標準出力stdout、および標準エラーstderrの3つのシステムファイルに関連付けられています。したがって、2>& 1は標準エラーも標準出力に出力されることを意味します。

以下は、2>& 1がどのような効果をもたらすかを示す例です。

1234 $ cat ./t.sh#!/usr/bin/zshttttttecho" test"

t.shには2つのコマンドが含まれていますが、ttttttは存在しないコマンドであり、実行するとエラーが報告されますデフォルトでは、エラーはstderrに出力されます。エコーは正しく実行され、文字列情報を標準出力に出力することができます。ここの標準出力は/dev /nullにリダイレクトされています。その後、標準エラーも/dev /nullに出力されます。
2>& 1を後で書く必要があるのはなぜですか。

まず、./t.sh> /dev /null 2> 1は標準出力を/dev /nullにリダイレクトします。2> 1は標準出力の動作をコピーする標準エラーです。つまり、ファイルにもリダイレクトされ、最終的には標準出力とエラーがファイルにリダイレクトされます。 ./t.sh 2>& 1> /dev /null 2>& 1標準エラーは標準出力の動作をコピーしますが、標準出力は依然として端末にあります。 > /dev /null出力は/dev /nullにリダイレクトされますが、それでも標準エラーは/dev /nullに変更されません。


テスト結果は次のとおりです。

1234567891011121314→ワークスペース./t.sh ./t.sh:2:コマンドが見つかりません:ttttttest→ワークスペース./t.sh> /dev/null./t.sh:2:コマンドが見つかりません:ttttt ➜ワークスペース./t.sh ./t.sh:2:コマンドが見つかりません:ttttttest Dワークスペース./t.sh> /dev/null./t.sh:2:コマンドが見つかりません:ttttt➜ワークスペース./T.sh> /dev /null 2> 1&1; workspace ./t.sh 2>&1; /dev/null./t.sh:2:コマンドが見つかりません:ttttttest

Copyright © Windowsの知識 All Rights Reserved