我正在尝试在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退出,或者我可以采取不同的方法来实现我想要的行为?
答案 0 :(得分:14)
只有在脚本中的某个地方有set -e
时才会退出脚本,所以我认为就是这种情况。编写阻止set -e
触发自动退出的函数的简单方法是:
run_cmd() {
if eval "$@"; then
# Process Success
else
# Process Failure
fi
}
请注意,function
在定义函数时不可移植,如果也使用()
则为冗余。