2.2 標準出力・標準エラー出力とリダイレクト

2.2.1 標準出力と標準エラー出力

ここでは,コマンドの実行結果が画面に表示される仕組みをより正確に説明します。

多くの UNIX コマンドは ``標準出力'' と ``標準エラー出力'' と呼ばれる情報の出口を持っています。

  1. 標準出力 stdout (standard output): コマンドの実行結果が出力される
  2. 標準エラー出力 stderr (standard error): エラーメッセージ等のコマンド実行に係わる付加的な情報が出力される
コマンドは,実行結果などを画面ではなく,これらの出口に出力します。 画面にコマンドの実行結果等が表示されるのは,図に示すように,通常は標準出力と標準エラー出力が画面に接続されているためです。
\includegraphics*{stdout.eps}

2.2.2 標準出力のリダイレクト

コマンドを実行する際,標準出力の接続先をファイルに変更するようシェルに対して指示することができます。 このような接続先の変更操作(切り替え)をリダイレクト (redirection) といいます。 第 2.1 節で紹介した >>> は,共に実行するコマンドの標準出力の接続先をファイルに切り替えるリダイレクトです。 標準出力のリダイレクトを用いれば,通常は画面に表示されるコマンドの実行結果を,ファイルに保存することができます。
\includegraphics*{redirect_stdout.eps}
例えば, cal 2012 > year を実行して結果がファイル year に保存されるのは,「> year」の指定により cal コマンドの標準出力が,画面ではなくファイル year に接続されるためです。

なお,tcsh で標準出力と標準エラー出力の接続先を共にファイルに切り替えるには >&>>& を使います。

注意

cal 2012 > year において, 「2012」は cal コマンドに対する動作の指示なので,cal コマンドの引数です。 一方,「> year」は シェルに対して標準出力の接続先変更を指示しているのであり,cal コマンドの動作を変更するものではありません。 したがって,「> year」は cal コマンドの引数ではありません。