9.5 その他の雑多なテクニック

以下に少しだけシェルをより使い込むためのヒントをあげておきます。

キーボードからの標準入力の終了

今回用意した bc.in ファイルなどは Ng などのエディタを使わなくても以下のようなやり方で作成できます。

cc2000(100)% cat > bc.in

cat コマンドは引数としてファイル名が与えられていない時は、入力を標準入力から行いますから、それをキーボードから入力して出力先を画面ではなくファイルにするというわけです。

上のコマンドを実行して、タイプする内容は 1 + 2<Return>2 * 3<Return>4 / 2<Return>C-d です。最後の C-d はファイルの終了 [1] を意味します。
キーボードからファイルの終了を入力するのは、大抵の場合この C-d です。

今まで黙っていましたが、 bc コマンドは、サブコマンド quit ばかりでなく、このファイルの終了を受けとっても終了します。だからこそ cat bc.in | bc で文句も言わずにちゃんと処理を終了したのです。

複数のコマンドを一行に書く

「;」を利用して、複数のコマンドを一行に書くことができます。例えば次のような感じです。

cc2004(82)% date ; hostname ; whoami ; id
2003年 10月  3日 金曜日 18:53:08 JST
cc2004
yasuda
uid=473088(enokida) gid=100(student)
cc2004(83)% 

ところで上の4つのコマンドの結果をぜんぶ一つのファイルにリダイレクションしたい場合は、以下のようにします。

cc2000(102)% ( date ; hostname ; whoami ; id ) > hostinfo.txt

このような書き方で、別々に処理することももちろんできます。

cc2000(103)% ( date ; hostname ) > hostinfo1.txt ; ( whoami ; id ) > hostinfo2.txt

一連のコマンドをファイルに書いておく

シェル自身もまたフィルタコマンドです。
ですからファイルにコマンド列を書いておいて、それをシェルの標準入力に与えて処理させることができます。cc環境標準のシェルは tcsh ですから、シェルのコマンド名は tcsh です。以下に例を挙げておきます。

cc2000(104)% cat batch
echo 'Here is my session information.'
date
hostname
whoami
id
cc2000(82)% tcsh < batch

対話形式ではないので警告のメッセージが表示される時がありますが、とりあえず結果は表示されると思います。単純な一連の手続きであればこれで十分ですね。

例のように短いものであれば問題ないのですが、長い複雑なものを作ったりしたときには何らかの覚え書きを入れておきたい時があります。
そのような時には # を利用します。 # より右に書いたものは覚え書き [2] とみなされて、その部分を一連の実行するべき手続きとして扱わず、無視されます。
以下に覚え書きを含めて書いた例を挙げておきます。

 cc2000(84)% cat batch 
 #
 #    Sample shell program. '03.2 Yasu.
 #
 echo 'Here is my session information.'
 date
 hostname
 whoami
 id      # show my username and etc.
 cc2000(85)% 



Yutaka Yasuda (yasuda@bakkers.gr.jp)