Facebook Twitter Google Maps RSS
Home 未分類 標準エラー出力について考える
formats

標準エラー出力について考える

Published on 2014年6月11日, by in 未分類.

 

こんにちは!

 

今日は標準エラー出力について考えます。
みなさんはこんな記述を見たことはありますか?

 

$ sh test.sh > /dev/null 2>&1

 

…これはどういう意味でしょう。。

 

この記述を読み解いてみたいとおもいます。

 

【>】

 

sh test.shと/dev/nullの間にある > は
標準出力先を変更するためのものです。

 

標準出力とはコマンドの実行結果です。

 

通常は画面に出力されます。

 

たとえば…

 

$ echo hoge
こうすると画面上にhogeが出力されますが、

 

$ echo hoge > hoge.log
こうするとhoge.logの中にhogeが出力されます。

 

【/dev/null】

 

/dev/nullはunixにおけるスペシャルファイルのひとつで
その実態は空ファイルです。

 

ためしに下記を実行してみると…確かに中身は空っぽです。
$ cat /dev/null

 

今度はecho hogeの結果を/dev/null に出力してみましょう。

 

$ echo hoge > /dev/null
$ cat /dev/null
出力後に/dev/null を見てみてもやはり中身は空っぽ…。

 

/dev/null に出力されたものはすべて破棄されてしまいます。

 

【2>&1】

 

この1や2はファイルディスクリプタという
アクセスされているファイルや標準入出力を
OSが認識するための識別子です。
1…標準出力
2…標準エラー出力

 

なお、標準エラー出力とは、コマンド実行時に発生したエラーのことです。
こちらも通常は画面に出力されますね。

 

2>&1と記述することで、
標準エラー出力の出力先を「1」の標準出力の出力先と同じに変更しています。

 

ここまで踏まえたうえで、最初の例に戻ると…
sh test.shの実行結果を破棄したうえで、
エラーの出力も破棄している、ということになります。

 

画面にもログにもなにも出力したくない場合は
このように記述すればいいのですね(*´`)

 

ではまた!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です


*