アプリ版:「スタンプのみでお礼する」機能のリリースについて

command > /dev/null 2>&1

というコマンドがありましたが意味がわからないので教えてください。
> /dev/null
部分は、出力を捨てるということだと思いますが、
2>&1
部分がわからないです。

A 回答 (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に)捨てられる、つまり、エラーがあろうがなかろうが出力されるメッセージは何もないことになります。
    • good
    • 3
この回答へのお礼

ありがとうございます。
2 がエラー出力
&1 が標準出力の出力場所
ということでしょうか。

お礼日時:2006/07/06 14:00

シェルの種類が不明ですが、少なくともbashの場合、


>&
これで出力ファイル・ディスクリプタ(記述子)の複製を行います。

したがって、
2>&1
この場合、ファイル・ディスクリプタ2に、ファイル・ディスクリプタ1の複製を使用するという意味になります。
これらはbashのmanコマンドで詳しく解説されています。

リダイレクトは左側から評価されるので、最初に
command > /dev/null
が評価され、標準出力が/dev/nullを指すようになります。
続いて、
2>&1
が評価されて、標準エラー出力が標準出力の複製となります。このとき、最初の評価で標準出力は/dev/nullを指しているので、結局、標準エラー出力として与えられる「標準出力の複製」は/dev/nullとなります。

なんだか分かりにくいですね。説明が下手ですみません。。。

参考URL:http://www.linux.or.jp/JM/html/GNU_bash/man1/bas …
    • good
    • 6
この回答へのお礼

参考になるサイト情報も示していただき、ありがとうございました。

お礼日時:2006/07/11 17:42

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています