次のページ
前のページ
目次へ
bash には、ファイル記述子(file descriptor)として、標準入力
(stdin )、標準出力(stdout )、そして標準エラー(stderr )
の 3 つがあります。
( std は standard の意味です。)
基本的に以下のことができます。
stdout を file にリダイレクト
stderr を file にリダイレクト
stdout を stderr にリダイレクト
stderr を stdout にリダイレクト
stderr と stdout を file にリダイレクト
stderr と stdout を stdout にリダイレクト
stderr と stdout を stderr にリダイレクト
(リダイレクト構文では)数字の 1 は stdout を表し、
2 は stderr を表します。
*上記の項目それぞれについての簡単なメモ* less コマンドを使うと、
stdout (これはバッファに残ります)と stderr (スクリーンには
表示されますが、そのバッファを見ようとすると消去されてしまいます)の両方を見る
ことができます。
次の場合、プログラムの出力がファイルに書き込まれます。
$ ls -l > ls-l.txt
上記では ls-l.txt というファイルが作成されます。そして、'ls -l ' というコマンドを実行した場合にスクリーンに表示される
内容が、そのファイルに保存されます。
次の場合、プログラムの stderr の出力がファイルに書き込まれます。
$ grep da * 2> grep-errors.txt
上記では、grep-errors.txt というファイルが作成されます。そして、
そのファイルには、'grep da * ' の出力のうち、読者が見ようとしている
はずの stderr の部分が書き込まれています。
次の場合、プログラムの stderr 出力が、stdout と同一の
ファイル記述子に書き込まれます。
$ grep da * 1>&2
上記では、コマンドの stdout の部分が stderr に送られます。
別のやり方があることに読者は気付いているかもしれません。
次の場合、プログラムの stderr 出力が、stdout と同一のファイル
記述子に書き込まれます。
$ grep * 2>&1
上記では、コマンドの stderr の部分が stdout に送られます。
したがって、もしパイプを使って less に流せば、通常なら stderr に書き込まれて消えてしまうはずの出力行が、 stdout に送られたこと
で保持されているのを確認できます。
次の場合、プログラムの全ての出力がファイルに入れられます。これは、完全に
黙ってコマンドを実行させたいような cron の実行項目を書く場合に適して
います。
$ rm -f $(find / -name core) &> /dev/null
cron プログラムの実行項目を思い浮かべてほしいのですが、上記は、
あらゆるディレクトリから "core " と呼ばれるファイルをすべて削除する
ものです。
コマンドの出力を見えなくしてしまう場合は、そのコマンドがどういう処理をす
るのか充分認識しておかなければいけません。
次のページ
前のページ
目次へ
|