0

如何将下面的代码作为通用函数在 bash 中使用整个脚本:

if [[ $? = 0 ]]; then 
    echo "success " >> $log
else echo "failed" >> $log
fi
4

4 回答 4

2

您可以为命令执行编写一个包装器:

function exec_cmd {
    $@
    if [[ $? = 0 ]]; then 
        echo "success " >> $log
    else 
        echo "failed" >> $log
    fi
}

然后使用以下函数在脚本中执行命令:

exec_cmd command1 arg1 arg2 ...
exec_cmd command2 arg1 arg2 ...
...
于 2013-10-25T11:08:26.910 回答
0

如果您不想包装原始调用,则可以使用显式调用,如下所示

function check_success {
    if [[ $? = 0 ]]; then 
        echo "success " >> $log
    else echo "failed" >> $log
    fi
}



ls && check_success

ls non-existant
check_success
于 2013-10-25T11:10:44.923 回答
0

您可以将其放入.bashrc并随时调用

function log_status { [ $? == 0 ] && echo success>>/tmp/status || echo fail>>/tmp/status }

如果您在每个命令之后都需要它,您可以让提示写入日志(注意原始 PS1 值已附加)。

export PS1="\$([ \$? == 0 ] && echo success>>/tmp/status || echo fail>>/tmp/status)$PS1"

(我没有这方面的经验,也许PROMPT_COMMAND是一个更合适的地方)

或者甚至变得更花哨,并用颜色查看结果。

我想您也可以尝试获取最后执行的命令:

于 2013-10-25T11:40:01.867 回答
0

没有真正干净的方法可以做到这一点。这很干净,可能足够好?

PS4='($?)[$LINENO]'
exec 2>>"$log"

这将显示日志中运行的每个命令,并且每个条目都将从上一个命令的退出代码开始......

于 2013-10-25T11:14:43.500 回答