シェルスクリプトの終了コードとロギング

シェルスクリプトの終了コードとロギング

STDERRとSTDOUTを両方の画面に送信し、それをファイル(test.log)に書き込む次の簡単なシェルスクリプトがあります。また、終了時に適切な終了コードを使用して終了しようとします。

このコードでは、最初のメッセージ(ブロック内)をエコーし​​て終了します。ただし、両方の文をエコーし​​、常にゼロで終了します。

$ cat test.sh
#!/bin/ksh

n_exitstatus=0

{
  n_exitstatus=1
  echo "Inside block : $n_exitstatus"
  exit $n_exitstatus
}  2>&1 | tee -a test.log

echo "Before last exit : $n_exitstatus"
exit $n_exitstatus
$ sh test.sh
Inside block : 1
Before last exit : 0
$ echo $?
0

最初の文をエコーし​​た直後に終了するように(画面とファイルに書き込まれるように)、このスクリプトをどのように変更しますか?

ベストアンサー1

パイプラインで内部コードブロックを使用できます。これにより、シェルはサブシェルを実行します。 Exitは機能のみを残します。パイプを取り外すと、期待| tee -a test.logどおりに機能します。

したがって、最も簡単な解決策は、ブロックからパイプを削除し、内部echoコマンドの後に配置することです。

ブロックを本体として関数を生成し、それを実行してから戻り値を使用して、外部コードをさらに実行する前に終了するかどうかを決定することもできます。

編集する 以下は便利なリンクです:http://www.bolthole.com/solaris/ksh-functions.html

おすすめ記事