計算数学 第12回 「I/Oリダイレクション、パイプ、メタキャラクター」
97/06/27 劉千鳳 (東京大学大学院数理科学研究科)
★目標:
I/Oリダイレクション, パイプを知る(使えるようになる).
★内容
1、I/Oリダイレクションとパイプ
1) 出力リダイレクション
2) 入力リダイレクション
3) エラー出力
4) パイプ
2、メタキャラクターとエスケープ
3、実習
4、付録
5、参考文献
==========================================
1. I/Oリダイレクションとパイプ
大半の UNIX コマンドは標準入力と標準出力を使用して動きます。
標準出力には端末の画面が使用され、標準入力にはキーボードが使用されます。
シェルにはコマンドの入力や出力を切替える機能があります。
例えば、コマンドの実行結果をファイルに出力するときなどには
それらの機能が使われています。
標準出入力先を変更することを
I/Oリダイレクション (I/O redirection)と言います。
> :標準出力の切り替え
< :標準入力の切り替え
1) 出力リダイレクション
例えば、ls を実行した結果を mytest ファイルに入れたい時は
次のコマンドを入力してみましょう。
% who > mytest
% cat mytest
ファイルに追加したい場合は、> の代わりに >> を使います。
たとえば、
% date >> mytest
% cat mytest
2) 入力リダイレクション
入力リダイレクションは次のように使います。
% sort < mytest
ところで
% cat mytest
% cat < mytest
とすると同じ出力結果が得られます。
実はシェルの解釈の仕方が違います。演習2をやって考えてみて下さい。
3) エラー出力
コマンドか引数が正しく入力されていない時には、エラーが出ます。
例えば、abc ファイルが存在していない場合に、
% ls mytest abc
ls: abc: No such file or directory
mytest
%
となって "ls: abc: No such file or directory"
というエラーが標準エラー出力に出ます。
このエラーをファイルに入れたい時は、次のコマンドを入力します。
>& 標準出力と標準エラー出力の切り替えです。
% ls mytest abc >& myerror
% cat myerror
abc: No such file or directory
mytest
%
4) パイプ
| は 「パイプ」と呼ばれ、 左のコマンドの標準出力を
右のコマンドの標準入力として渡す役目を果たします。
標準出力をファイルに書き出すには > を用いましたが,
コマンドに渡すには | を使うわけです。
次のコマンドを入力してみましょう。
% finger @mstm01
% finger @mstm01 | grep Fri
finger は login している user の使用状況を調べるコマンドです。
その後ろに |grep Fri を使えば、Friday から login している
user を調べることができます。
2. メタキャラクターとエスケープ
< , > , |, & のような記号には特別な意味があります。
それを メタキャラクター(meta character) といいます。
> という名前のファイルを指定する場合、以下の3つの方法があります。
% cat > \>
% cat > '>'
% cat > ">"
このように meta character の持つ特別な意味を消して、それを
単なる文字として扱うことをエスケープ(escape) と言います。
\ や ' や" も meta character です。
3. 実習
1) 次のコマンドを使って mytest を作成して下さい。
内容は好きにして下さい。
% cat > mytest
入力を終了させる時は Ctrl-D と入力してください。
2) 次のコマンドの違いは何でしょうか?
% pr mytest | more
% pr < mytest | more
3) 標準出力と標準エラー出力を別々のファイルに入れたい時は
どうすればいいでしょか?
次のコマンドを入力してみてください。
% ( more mytest abc > mytest2 ) >& myerror
% more mytest2
% more myerror
4) > を使う時、既存のファイルの中身は消され、新たな
実行結果が入れられますが、csh/tcsh でシェル変数
noclobber が設定されていると、既存のファイルが
> では上書きされないようにファイルが保護されます。
次のコマンドを実行してみてください。
% set noclobber
% more mytest > mytest
% more mytest
% unset noclobber
% more mytest > mytest
% more mytest
5) 自分の home directory 内の ファイル のうち . から
始まるファイル(隠れファイル)のみの list を標準出力
に出してください。 ^^^^
4. 付録
さまざまなリダイレクト
リダイレクトには上述のものの他に、次のようなものもあります.
>>&
>!
>>!
>&!
>>&!
<<
|&
5. 参考文献
・山口和紀:The UNIX Super Text [上],技術評論社,1992.
・坂本文:たのしいUNIX ,アスキー出版局、1990.
・羽山博:入門UNIX ,アスキー出版局、1990.
・96年度計算数学講義資料(http://nettomo.ms.u-tokyo.ac.jp/~ks/")