リダイレクションについて簡単に学びます. プログラムはなんらかの文字列を出力することがあります.例えば ls とすれば,今のディレクトリにあるファイル一覧という文字列が出力されます.またパイプで学んだように, more コマンドは,別のコマンドの出力を入力として受け取って処理しました.
この入力元や入力先(それぞれ標準入力, 標準出力といいます.)をファイルに変更することができます.これをリダイレクション,あるいはリダイレクトと呼びます.
例えば, 漢字コードを変換する nkf というプログラムを考えます. nkf は, nkf -e filename で filename というファイル名をもつファイルを日本語EUCに変換します. nkf -j filename ならば filename という名前のついたファイルをJISコードに変換して, 標準出力に出力します.
nkf -e memo.jis
と入力したとしましょう. memo.jis(JISコードで書かれているとします) が 日本語EUC に変換された結果が,画面にどんどん書き出されていきますが, memo.jis というファイルそのものが変更されるわけではありません. 標準出力が画面だからです. 日本語EUCに変換されたファイルを作るためには, リダイレクションを利用して,
nkf -e memo.jis > memo.euc
などとしてやります. 不等号の大なり(>)のあとにファイル名を書くことによって, 標準出力がそのファイル名を持ったファイルとなります.
「>」の場合には, ファイルを新たに作って, そのファイルの中に結果を書き込むことになります, もともと memo.euc というファイルが既に存在していた場合はそのファイルの内容は失われるので注意しましょう.
hello という5文字の内容をもつファイル, aisatu.txt を簡単に作りたいという場合は echo の出力先をファイルにすることで実現できます.
echo hello > aisatu.txt
出力結果をすでにあるファイルに追加することもできます.
echo konnichiha >> aisatu.txt
のように, 「>>」を使うと, aisatu.txt の内容は, 既にあった aisatu.txt のファイル内容の最後に, 今回の出力結果が加わったものになります.
cat aisatu.txt hello konnichiha
リダイレクションと前項で習ったパイプを組み合わせることができます.
nkf -e memo.jis | a2ps > memo.ps
とすると, 文字コードが日本語EUCに変換された上に, さらに PostScript に変更された memo.ps というファイルができます.
最後に,パイプとリダイレクションの違いをまとめておきましょう.
パイプ | あるプログラムの出力を別のプログラムの入力にする. |
リダイレクション | あるプログラムの入力,出力を(端末画面から)ファイルに変更する. |
ここでの説明は bash だけでなく, csh,tcsh などでも成り立ちます.
28.1 フィルタ | 28.2 リダイレクション | 28.3 環境変数 | ||
2009年度版に向けて現在作業中です.
このページに関してお気づきの点がありましたら
コメント投稿システムまでお願いします.
|
Thu, 13 Jan 2005 19:01:07 JST (1660d) |