2013年8月31日土曜日

【シェルスクリプト(bash)】 2>&1とは?

シェルスクリプトのサンプルコードをながめていると
「2>&1」という記載があり、初心者には???

とりあえず、ググッてみたところ処理の内容が判明。

file.log 2>&1 と記載すると
標準エラー出力は標準出力と同じfile.logに出力するという意味になるようです。

もう少し、細かく見ていくと

2> は標準エラー出力のリダイレクトの指示という意味になります。
リダイレクト??と思ったので、さらに調べてみると下記の意味のようです。

<リダイレクト(ITproより引用)>
---------------------------------------------------------------
シェルは「キーボードから入力し、画面に出力する」ようになっている。
こうした入力と出力の方法を変更する場合には、リダイレクトを使う。

リダイレクトには出力先を切り替える「>」、出力先のファイルに追加する「>>」
入力元を切り替える「<」、複数行の入力を行える「<<」がある。
---------------------------------------------------------------

なるほど!!という感じでしょうか。

さらに細かくみると
ファイル・ディスクリプタの0~2はシェルと予約されているとのこと。
意味は
0:標準入力(シェルにどのように入力するかを指定。デフォルトはキーボード)
1:標準出力(シェルの結果をどこに出力するかを指定。デフォルトは画面)
2:標準エラー出力(シェルの実行時に発生したエラーメッセージの出力先を指定。デフォルトは画面)
※1の場合は省略可能
 echo "メッセージ" 1 > file ではなく echo "メッセージ" > file  としても同じ意味となります。

なので、2>&1 と指定すると
標準エラー出力(2)の出力先を、標準出力(1)と同じところに変更するという意味になるようです。

今回は、ITproさんの【 リダイレクトとは 】という記事を参考にさせていただきました。
こちらには、リダイレクトについてもっと詳細が書かれているので、興味のある方は
参照してみてください♪


0 件のコメント:

コメントを投稿