私はいくつかの同様の質問(Bashのコマンドからの出力に変数を設定する方法など)をフォローしてきましたが、受け入れられた答えは私には機能しないようです。他の人の質問を脱線させるべきか、自分の複製を投稿するべきかわからなかったので、ここで間違った選択をした場合はお詫びします。
まとめているスクリプト内のいくつかのコマンドの出力と終了ステータスを取得したいと思います。これが私が使っているものの例です:
cmd_output=$(rm $file)
exit_status=$?
if [ "${exit_status}" -eq 0 ]
then
log "Successfully removed the original" ${TAB_LEVEL}
else
fail "Failed to remove the original, the output was: \n ${cmd_output}"
fi
ログ関数と失敗関数は次のとおりです。
# Usage: fail "Failure message"
function fail {
echo "FATAL ERROR: $1" >> "${LOG_DIR}/${LOG_FILE}"
exit 1
}
# Usage: log "Log message" 3 Where the tab-level is 3.
function log {
if (("${2}" > 0))
then
eval "printf ' %.0s' {1..$2}" >> "${LOG_DIR}/${LOG_FILE}"
fi
echo "$1" >> "${LOG_DIR}/${LOG_FILE}"
return 0
}
上記の例では、$(cmd)形式を使用していますが、バッククォートも使用してみました。
私のログファイルでは、障害が発生したときに表示されるのは次のとおりです。
致命的なエラー:オリジナルの削除に失敗しました。出力は次のとおりです:\ n
また、失敗したコマンドの出力は、通常どおり画面に表示されます。cmd_output変数が空のままになる一般的な理由はありますか?