允许某些退出代码不会在 bash“-e”模式下中止执行

允许某些退出代码不会在 bash“-e”模式下中止执行

如果umount返回 0 作为退出代码,则此脚本将继续运行。有时,退出代码是 127,我对此表示同意,脚本应该继续运行。我如何修改脚本以对允许的卸载退出代码进行“白名单化”?

set -e
sudo umount /drive || [ $? -eq 0 ] 
echo do stuff

如果存在这样的技术,我有很多用例可以使用它。

答案1

我们来试试这个:

if sudo mount /drive; then
    : # exit status 0
else
    rc=$?
    [ $rc -ne 127 ] && exit $rc
fi

用这个测试--用不同的值进行实验status

env status=0 bash -e -c '
    mycmd() { return $1; }
    if mycmd $status; then
        :
    else
        rc=$?
        [ $rc -ne 127 ] && exit $rc
    fi
    echo OK
'

答案2

您可以使用 case 语句将内容列入白名单或者采取其他操作。

sudo umount /drive

case $? in
        0)
                ;;
        127)
                ;;
        *)
                echo 'bailing!'
                exit 1
                ;;
esac

echo 'doing more stuff'

答案3

Glenn Jackman 的评论回答对我有用:

mycmd || [ $? -eq 127 ] || exit

相关内容