#navi(../)
* 標準出力、標準エラーをexecコマンドにより指定 [#c98b86ac]
シェルスクリプトを作成し、各種メッセージをファイルに出力する場合、>>を使ってファイルに出力したりしますね。~
これを、最初に一回設定すれば良い方法を記します。~
''注意'' この設定により出力は全てファイルに出力されます。したがって、画面には出力されません。
#contents
#htmlinsertpcsp(linux_ads_top.html,linux-sp.html)
*関連資料 [#i9b23040]
-[[teeコマンドでstderr(標準エラー)も対象にする>逆引きUNIXコマンド/teeコマンドでstderr(標準エラー)も対象にする]]
-[[2>&1をでバックグラウンド実行の&は何処に記述する?>逆引きUNIXコマンド/2>&1をでバックグラウンド実行の&は何処に記述する?]]
-[[標準エラー出力をファイルに出力する方法>逆引きUNIXコマンド/標準エラー出力をファイルに出力する方法]]
-[[echoコマンドの出力を標準エラー(stderr)に出力する方法>逆引きUNIXコマンド/echoコマンドの出力を標準エラー(stderr)に出力する方法]]
-[[画面出力しながらファイルにも出力したい・teeコマンド>逆引きUNIXコマンド/画面出力しながらファイルにも出力したい]]
* execコマンドにより出力先の指定 [#b5bf9c64]
以下のサンプルスクリプトのように、最初にexecにより出力先を指定します。~
以下の例では、標準出力をstdout.logに標準エラーをstderr.logに出力するようにしています。~
サンプルスクリプトではdateコマンドを利用し、dateコマンドの正常終了と異常終了(標準エラーに出力される)を記述し実行してみます。
** サンプルスクリプトの説明 [#u3056567]
#ref(exec_sample.sh)
以下のサンプルは3行目のdateコマンドは正常終了、4行目のdateコマンドはオプションエラーとなります。~
サンプルスクリプト実行後、stderr.logとstdout.logファイルが作成されています。
#!/bin/bash
exec 2>> stderr.log 1>> stdout.log
date
date error # Option error
** サンプルスクリプトを実行 [#c5c8eccb]
サンプルスクリプトに実行権限を付与し実行します。~
実行後、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'
* 標準出力と標準エラーを同一のファイルに出力したい [#a2388f88]
標準出力と標準エラーを同一のファイルに出力したい場合は、サンプルスクリプトの2行目を以下のように変更すれば可能です。~
標準出力と標準エラーの両出力がstdouterr.logに出力されます。
exec >> stdouterr.log 2>&1
#br
#htmlinsertpcsp(linux_ads_btm.html,linux-sp.html)
#br