如何从 Bash 函数返回失败值?

如何从 Bash 函数返回失败值?

背景

在此发帖,发布了以下解决方案:

function cmakerel {
    if expr match "$PWD" '*bld*' >/dev/null ; then
        cmake -D....
    else
        echo "Wrong directory!"
    fi
}

cmakerelcmake如果名称中PWD有,将调用该命令。bld

不过,我通常像这样调用该命令: cmakerel && make check

问题

我如何修改上述代码,以便它在失败时返回一个值,从而第二部分make check不会被调用?

返回某种非零值可能应该有效。

答案1

添加

return $?

cmake在退出函数的调用下方,使用与相同的退出代码cmake,并添加

return 1

echo在退出调用下方1,它是非零的,因此表示出现错误。


您也可以(如果组合调用两个命令)添加make对此函数的调用:

 cmake [args] && make -j4

或者,例如允许更细粒度的错误处理:

cmake [args]
local _ret=$?
if [ $_ret -ne 0 ] ; then
   echo "cmake returned with exit code $_ret, aborting!" >&2
   return $_ret
fi
make -j4

如果你将它作为一个独立程序来调用,即把该函数存储在一个 shell 脚本中,然后调用例如

/path/to/cmakerel.sh

那么您可以使用exit而不是return来中止整个程序/子shell。

相关内容