標準入出力
コマンドを起動すると、自動的に標準的な入出力チャンネルが開かれます。
「標準入力から入力し、標準出力に出力する」というシンプルな設計になっています。
シンプルな設計のおかげで、コマンド内部の動作を変更せず標準入出力先を柔軟に変更できます。
標準入力:プログラムの標準的な入力です。通常はキーボードが使われます。
標準出力:プログラムの標準的な出力です。通常は端末ディスプレイが使われます。
標準エラー出力:プログラムのエラーメッセージを出力するための標準的な出力です。通常は端末ディスプレイが使われます。
リダイレクト
標準入出力先を変更する機能をリダイレクトと呼びます。
標準入力のリダイレクト

キーボードの代わりにファイルを標準入力につなぐことを、入力リダイレクトと呼びます。
入力リダイレクトは「<」を使います。
コマンド名 < ファイル名 でOKです。
「標準入力から受け取る」仕組みでプログラムを書くと、汎用性が高く、他のプログラムとの連携もしやすくなります。
標準出力のリダイレクト

コマンドの実行結果を画面に表示するのではなくファイルに保存したい場合にもリダイレクト機能が使えます。
出力リダイレクトは「>」を使います。 コマンド名 > ファイル名
でOKです。
標準エラー出力のリダイレクト

標準エラー出力をファイルにリダイレクトするには、「2>」を使います。
コマンド 2> ファイル名
でOKです。
標準出力と標準エラー出力は別チャンネル扱いです。
標準出力と標準エラー出力をまとめる

標準出力と標準エラー出力を1つのファイルにリダイレクトする場合は、
標準出力をリダイレクトした後ろに、「2>&1」を入力します。
例:ls /xxx > result.txt 2>&1
&1は標準出力のチャンネルを表してします。
チャンネル管理
- 標準入力:0
- 標準出力:1
- 標準エラー出力:2
コマンド結果とエラーメッセージを合わせて1つのログファイルとしたい場合によく使われます。
リダイレクトによる上書き

リダイレクトすると、ファイルは上書きされます。
リダイレクト先の指定ミスで重要なファイルを失うこともあります。
>のかわりに>>と書くことで、上書きではなくファイル末尾に追記する形で出力リダイレクトすることができます。
noclobberオプションをsetコマンドで設定すると、上書きする際エラーとなるように動作を変更できます。
よく使われるリダイレクト先

リダイレクト先として/dev/nullというファイルがよく使われます。
このファイルの特徴は、
入力先として指定しても、何も内容を返さない。
出力先としても指定しても、書き込んだデータはどこにも保存されずに消えて無くなる
コメント