FreeBSD QandA 609

FreeBSD QandA

Q. コマンドの実行結果をファイルに残したり、結果を別のコマンドに渡したい
   と思うのですが、どのように操作するのでしょうか。

A. UNIX の Shell(シェル)にはリダイレクトというとても便利で柔軟な機能が
   あります。コマンドの実行結果を別のコマンドの入力にしたり、ファイルに残
   したりできます。この機能の利用方法は使用しているシェルによって若干異
   なってきます。

   1. 結果をファイルに記録する
   csh, tcsh など
       % make > file.log
   sh, bash など
       $ make > file.log

   2. 標準エラー出力も記録する
   csh, tcsh など
       % make >& file.log
   sh, bash など
       $ make > file.log 2>&1

   3. コマンドの結果を別のコマンドに渡したい
   csh, tcsh など
       % ls | more
   sh, bash など
       $ ls | more

   4. エラー出力も渡したい
   csh, tcsh など
       % ls |& more
   sh, bash など
       $ ls 2>&1 | more

   5. 画面を見ながらその結果を片っ端から記録したい
   csh, tcsh など
       % telnet hoge.hiyo.ac.jp |& tee file.log
   sh, bash など
       $ telnet hoge.hiyo.ac.jp 2>&1 | tee file.log
   これでTELNETのログができます。

     注) tee とは 標準入力からデータを読み込み、その内容を指定された
         ファイルと 標準出力に出力するコマンドです。
         詳しくは jman tee (日本語版 マニュアルの場合) を参照。

   6. 画面を操作しながらその結果を片っ端から記録したい
   script(1)コマンドは、シェルによらず動作出来るので、とても有用です。
       % script file.log
   これで画面への入力及び出力の全てを file.log に記録する事が出来ます。
   ただし、Enter/C-p/C-nなどのシェルに対するキー入力も、コントロール
   コードとして そのまま記録されてしまいます。
   file.logへの記録を終えたいときは exitしてください。

間違い・追加情報を見付けた場合は、 修正案の投稿のしかた を読んだ上で、
QandA@jp.FreeBSD.org まで お知らせください。