SHELL动作状态的一般功能

时间:2013-10-25 11:00:38

标签: bash

如何使代码作为一般函数在bash中使用整个脚本:

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

4 个答案:

答案 0 :(得分: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 ...
...

答案 1 :(得分:0)

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

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



ls && check_success

ls non-existant
check_success

答案 2 :(得分:0)

没有真正干净的方法来做到这一点。这很干净,可能还不错?

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

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

答案 3 :(得分: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是一个更合适的地方)

甚至可以获得更多的幻想,并使用colours查看结果。

我猜你也可以玩最后执行的命令: