假设我在bash中有这个日志记录功能。
function report {
echo "Log message: [$@] time: " `date` >> reports.txt
}
每当我需要这样的时候,我都会打电话给它。
report running python
python3 script.py
report python script ended
现在,我还要在日志消息中提供script.py
我显然可以使用report python script ended with $? exit code
执行此操作
但有没有办法不显式传递这样的参数,而是从功能报告中获取它?
我试过
...
echo "Log message: [$@] time: " `date` with exit code $? >> reports.txt
...
但即使脚本失败,我总是得到0
。
答案 0 :(得分:3)
$?
不会重置,因此您应该能够将其捕获为report
的第一个操作:
report () {
status=$?
...
printf 'Log message: [%s] time: %s with exit code %d\n' "$1" "$(date)" "$status"
}
请注意,您应该将日志消息作为单个参数传递,而不是作为任意的单词序列。
report "running python"
python3 script.py
report "python script ended"
将退出状态作为参数直接传递,例如python3 script.py; status=$?; ...; report "python script ended" "$status"
,可能更清晰。这使您无需确保在要记录其状态的命令后立即调用report
。 (如果不适用,这也允许您忽略状态,就像script.py
之前的呼叫一样。)