如何将退出代码传递给bash中的函数?

时间:2016-04-05 17:56:06

标签: linux bash

假设我在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

1 个答案:

答案 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之前的呼叫一样。)