シェルスクリプトを作成し、各種メッセージをファイルに出力する場合、>>を使ってファイルに出力したりしますね。
これを、最初に一回設定すれば良い方法を記します。
注意 この設定により出力は全てファイルに出力されます。したがって、画面には出力されません。
以下のサンプルスクリプトのように、最初にexecにより出力先を指定します。
以下の例では、標準出力をstdout.logに標準エラーをstderr.logに出力するようにしています。
サンプルスクリプトではdateコマンドを利用し、dateコマンドの正常終了と異常終了(標準エラーに出力される)を記述し実行してみます。
以下のサンプルは3行目のdateコマンドは正常終了、4行目のdateコマンドはオプションエラーとなります。
サンプルスクリプト実行後、stderr.logとstdout.logファイルが作成されています。
#!/bin/bash exec 2>> stderr.log 1>> stdout.log date date error # Option error
サンプルスクリプトに実行権限を付与し実行します。
実行後、stdout.log, stderr.logファイルが作成されていることが確認できます。
作成されたファイルをcatにて確認すると、出力結果が各ファイルに出力されていることが確認できます。
$ chmod +x exec_sample.sh $ ./exec_sample.sh $ ls std*.log stderr.log stdout.log $ cat stdout.log 2011年 3月 3日 木曜日 12:34:56 JST $ cat stderr.log date: invalid date `error'
標準出力と標準エラーを同一のファイルに出力したい場合は、サンプルスクリプトの2行目を以下のように変更すれば可能です。
標準出力と標準エラーの両出力がstdouterr.logに出力されます。
exec >> stdouterr.log 2>&1