計算数学 第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/")