- ベストアンサー
シェルコマンドの 2>&1 とはどういう意味でしょうか?
command > /dev/null 2>&1 というコマンドがありましたが意味がわからないので教えてください。 > /dev/null 部分は、出力を捨てるということだと思いますが、 2>&1 部分がわからないです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
Unix ではファイル記述子というのがあって、番号、多くの場合 0, 1, 2 が使われます。0は入力、1は普通のメッセージ出力、2はエラーメッセージの出力というように使い分けされています。 さて、ご質問ですが、command > /dev/null という部分は、command の普通のメッセージ(ファイル記述子1番)を /dev/null というファイル(このファイルは特殊で、ここに出力された内容は全て捨てられます)に出力されます。で、残る "2>&1" という部分ですが、これは2番のファイル記述子を1番というファイル記述子にする、という意味になります。 従いまして、"command > /dev/null 2>&1" とすることで command からの全てのメッセージは(/dev/nullに)捨てられる、つまり、エラーがあろうがなかろうが出力されるメッセージは何もないことになります。
その他の回答 (1)
- tropic_snow
- ベストアンサー率61% (51/83)
シェルの種類が不明ですが、少なくともbashの場合、 >& これで出力ファイル・ディスクリプタ(記述子)の複製を行います。 したがって、 2>&1 この場合、ファイル・ディスクリプタ2に、ファイル・ディスクリプタ1の複製を使用するという意味になります。 これらはbashのmanコマンドで詳しく解説されています。 リダイレクトは左側から評価されるので、最初に command > /dev/null が評価され、標準出力が/dev/nullを指すようになります。 続いて、 2>&1 が評価されて、標準エラー出力が標準出力の複製となります。このとき、最初の評価で標準出力は/dev/nullを指しているので、結局、標準エラー出力として与えられる「標準出力の複製」は/dev/nullとなります。 なんだか分かりにくいですね。説明が下手ですみません。。。
お礼
参考になるサイト情報も示していただき、ありがとうございました。
お礼
ありがとうございます。 2 がエラー出力 &1 が標準出力の出力場所 ということでしょうか。