第 1 部入門第 4.2 節 の復習から始めます。
コマンド command が画面に表示する内容を,ファイル名が file であるファイルに格納するには
command [argument] >
file
とします。ここで [argument] は,command に引数を与えたけ
れば argument に指定できることを表します。file として,まだ
存在しないファイルを指定すれば,file が自動的に作成されます。file が既存のファイルならば,その内容は command の出力で上書きさ
れます14。
ls -l .cshrc > cshrc_info
すでに存在するファイルにコマンド出力を追加したい場合には >
の代わ
りに >>
を使い,
command [argument] >>
file
とします。
>
と >>
の使い方を確かめるために,以下を順に実行し
てください。一行実行する度に cat コマンドでファイル now の内容を
確認してください。
date > now cal > now date >> now
ここでは,コマンドの実行結果が画面に表示される仕組みをより正確に説明します。
多くの UNIX コマンドは ``標準出力'' と ``標準エラー出力'' と呼ばれる情報 の出口を持っています。
コマンドを実行する際,標準出力の接続先をファイルに変更するようシェルに対
して指示することができます。このような接続先の変更操作(切り替え)をリダイレクト(redirection) といいます。
第 4.1 節で紹介した >
と >>
は,共に実
行するコマンドの標準出力の接続先のみをファイルに切り替えるリダイ
レクトです。標準出力のリダイレクトを用いれば,通常は画面に表示されるコマ
ンドの実行結果を,ファイルに保存することができます。
ls -l .cshrc > cshrc_info
を実行して結果がファイル cshrc_info に保存されるのは,
「> cshrc_info
」の指定により ls コマンドの標準出力が,画面ではな
くファイル cshrc_info に接続されるためです。
なお,tcsh や csh で標準出力と標準エラー出力の接続先を共にファイルに切り
替えるには >&
や >>&
を使います。
ls -l .cshrc > cshrc_info
において,
「-l .cshrc
」は ls コマンドに対して .cshrc の詳細情報を出力するよ
うに指示するものなので,ls コマンドの引数です。
一方,
「> cshrc_info
」は
シェルに対して標準出力の接続先変更を指示しているのであり,
ls コマンド自体の動作を変更するものではありません。
したがって,
「> cshrc_info
」は ls コマンドの引数ではありません。
ホームディレクトリで次の操作を行ってください。
ls -l .cshrc
を実行して,.cshrc の詳細情報が画面に表示され
ることを確認してください。
ls -l Cshrc
を実行して,ファイル Cshrc が見つからない旨の
エラーメッセージが出ることを確認してください。もし,ファイル
Cshrc がホームディレクトリに存在するならば,名前を変更するか,不
要ならば削除してください。
ls -l Cshrc .cshrc
を実行してください。
ファイル Cshrc が見つからない旨のエラーメッセージと, .cshrc の詳細情報が表示されます。
ls -l Cshrc .cshrc > ls.out
を実行して,画面の表示とファイ
ル ls.out の中身を確認し,何が起きたかを前の図と対応させて考えて
ください。
ls -l Cshrc .cshrc >& ls.out
を実行して,画面の表示とファイル ls.out の中身を確認し,前項と
の違いを考えてください。
納得したら ls.out は削除しましょう。
キーボードからデータを受け取って処理をする UNIX コマンドの多くは,正確に はキーボードではなく標準入力(stdin)という入口から入力を読み込みま す。標準入力は,シェルによって通常はキーボードに接続されているので,その 結果として,コマンドはキーボードから入力を受け取るのです。
プロンプトが現れず,wc が標準入力からの入力を待っている状態になります。
wc はキーボードに接続されている標準入力から入力を受け取って処理 し,結果を標準出力に出しました。
wc の実行が終了したのでプロンプトが現れます。
標準出力の接続先を切り換えできるのと同様に,標準入力の接続先を切り換える こと (リダイレクト) も可能です。
command [argument] <
file
を実行します。ここで [argument] は,command に引数を与え
たければ argument に指定できることを表します。
コマンドの標準入力と標準出力を同時に切り換えることもできます。 例えば,標準入力を .cshrc に,標準出力を wc.out に切り換えて wc コマンドを実 行するためには
wc < .cshrc > wc.outとします。 実際に試して結果を確認してください。 納得したら wc.out を削除しましょう。
以降の問題では,今作成したディレクトリ part4 (~/unix/part4) にファイルを作ってください。そのために,part4 をカレントディレクトリと しましょう。
echo とリダイレクトを使って,自分の学生番号と名前の入ったファイル myname を作ってください。
さて,cat コマンドを用いて,中身が
hakodateであるファイルを作成してください。ファイル名は campus とします。
sapporo
asahikawa
kushiro
iwamizawa
hakodate
これは,sort がファイル campus を直接読み込んで処理する例 です。
hakodateと入力してください。sort コマンドを正常に終了させて,出力 を観察してください。
sapporo
asahikawa
uniq コマンドの標準入力からファイル campus_s の内容を与え,uniq の動作を確認してください。次にファイル campus を与えた場合との違 いを確認してください。
tr a A
を実行してから
hakodate sapporoを標準入力(キーボード)から入力してください。入力を終えた ら tr コマンドを正常終了させてください。
tr a-z A-Z
を実行
してみましょう。入力には前項と同じものを与えてください。
では,ファイル campus の内容をすべて大文字にしたものを,ファイル CAMPUS に保存しましょう。tr コマンド,および標準入力と標準出力の リダイレクトを使ってください。