標準入出力で説明しているように、コマンドの標準出力のデフォルトはディスプレイなので、実行結果は通常、ディスプレイに表示されます。
コマンドの実行結果をファイルに保存したい場合はリダイレクトを使って標準出力をファイルに切り替えます。コマンドの後にリダイレクト記号「>」とファイル名を入力することで、実行結果がそのファイルに保存されます。
上の実行例では、「a.txt」から重複行を取り除いた結果を「b.txt」に保存しています。
また、コマンドの標準入力のデフォルトはキーボードですが、リダイレクト「<」を使用してこれをファイルに切り替えることができます。
次の例ではファイルの内容をリダイレクトでtrコマンドの標準入力に渡し、文字「t」を削除した結果を標準出力に出力しています。
trコマンドは引数にファイル名をとらないため、ファイルから読み込む場合は上の例のようにリダイレクトを使用します。
以下にリダイレクトの使い方をまとめておきます。いずれもコマンドが左側にくる点に注意してください。
リダイレクト書式 |
内容 |
コマンド > ファイル |
コマンドの標準出力をファイルに書き込む |
コマンド < ファイル |
ファイルの内容をコマンドの標準入力へ送る |
コマンド >> ファイル |
コマンドの標準出力をファイルに追記する |
コマンド 2> ファイル |
ファイルに標準エラー出力を書き込む |
コマンド 2>> ファイル |
ファイルに標準エラー出力を追記する |
コマンド > ファイル 2>&1 |
ファイルに標準出力と標準エラー出力を書き込む |
コマンド >> ファイル 2>&1 |
ファイルに標準出力と標準エラー出力を追記する |
|
書式中の「1」や「2」といった数字はファイルディスクリプタと呼ばれるもので、下表のような意味を持ちます。
ファイルディスクリプタ |
内容 |
デフォルト |
0 |
標準入力 |
キーボード |
1 |
標準出力 |
ディスプレイ |
2 |
標準エラー出力 |
ディスプレイ |
|
記号「>&」は左側のファイルディスクリプタの出力先を、右側のファイルディスクリプタの出力先に変更するという意味です。したがって「2>&1」と記述した場合、標準エラー出力先を標準出力先と同じにするという意味になります。
|
|
・シェルスクリプトなどでよく見かける「コマンド > /dev/null 2>&1」という記述は、標準出力および標準エラー出力を/dev/nullファイルにリダイレクトするという意味です。/dev/nullは特殊なファイルで、入力された全てのデータを消し去ります。つまりコマンドが出力するメッセージをディスプレイに一切出力したくない場合にこのような記述をします。
|
|
|