サブ関数(のような対話式の操作で、のように)を実行してログを保持したいとします。bashで戻りコードとサブ関数のログを保持する方法
オリジナル
#!/bin/bash
foo() {
echo "Error"
return 1
}
bar() {
local data
read -p "data=" data
echo "OK: $data"
return 0
}
foo
echo "Return code=$?"
bar
echo "Return code=$?"
した後、戻り値送信するために、名前付きパイプを使用し
#!/bin/bash
foo() {
echo "Error"
return 1
}
bar() {
local data
read -p "data=" data
echo "OK: $data"
return 0
}
LOG=my.log
foo | tee -a $LOG
echo "Return code=$?"
bar | tee -a $LOG
echo "Return code=$?"
デフォルトでは、パイプの終了ステータスは、パイプ内の最後のコマンドの終了ステータスです。 ** pipefail **オプション( 'set -o pipefail')を設定することはできますが、何らかの理由でパイプの' tee'コマンドが失敗した場合でも、間違った終了コードを得ることができます。ファイル)。 – Leon