【问题标题】:Get exit code for eval command in sh在 sh 中获取 eval 命令的退出代码
【发布时间】:2013-01-01 14:03:27
【问题描述】:

我正在尝试在 shell 脚本中创建一个函数,该函数接受一个命令并使用 eval 执行它,然后根据命令的成功执行一些后处理。不幸的是,代码的行为不像我预期的那样。这是我所拥有的:

#!/bin/sh

...

function run_cmd()
{
        # $1 = build cmd

        typeset cmd="$1"
        typeset ret_code

        eval $cmd
        ret_code=$?

        if [ $ret_code == 0 ]
        then
                # Process Success
        else
                # Process Failure
        fi

}

run_cmd "xcodebuild -target \"blah\" -configuration Debug"

当命令 ($cmd) 成功时,它工作正常。当命令失败(例如编译错误)时,脚本会在我处理失败之前自动退出。有没有办法可以防止 eval 退出,或者有什么不同的方法可以让我实现我想要的行为?

【问题讨论】:

  • 除非您的脚本中某处有set -e,否则不应自动退出。如果你有它,set +e 将禁用它。
  • sigh 我有 set -o errexit 在调用者脚本的顶部徘徊。感谢您指出这一点。

标签: eval sh exit xcodebuild


【解决方案1】:

只有在脚本中某处有set -e 时,该脚本才会退出,所以我假设是这种情况。编写阻止set -e 触发自动退出的函数的更简单方法是:

run_cmd() {
        if eval "$@"; then
                # Process Success
        else
                # Process Failure
        fi
}

注意function在定义函数时是不可移植的,如果同时使用()则是多余的。

【讨论】:

    猜你喜欢
    • 2018-11-04
    • 1970-01-01
    • 2018-12-11
    • 2012-01-05
    • 2018-04-26
    • 2019-03-05
    • 1970-01-01
    • 2012-01-02
    • 1970-01-01
    相关资源
    最近更新 更多