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

kfm*_*e04 7 bash

背景

在这篇文章中发布了以下解决方案:

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

cmakerel将调用cmake命令,如果PWDbld其名称。

但是,我通常会像这样调用这个命令: cmakerel && make check

如何修改上面的代码,使其在失败时返回一个值,从而make check不会调用第二部分?

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

Dan*_*eck 10

添加

return $?
Run Code Online (Sandbox Code Playgroud)

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

return 1
Run Code Online (Sandbox Code Playgroud)

echo调用 exit with下方1,它是非零的,因此表示一个错误。


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

 cmake [args] && make -j4
Run Code Online (Sandbox Code Playgroud)

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

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

如果您将其作为独立程序调用,即将该函数存储在 shell 脚本中,并调用例如作为

/path/to/cmakerel.sh
Run Code Online (Sandbox Code Playgroud)

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