在 `command || 之后检查退出状态是否为 0 以外的状态return` 无法访问?

在 `command || 之后检查退出状态是否为 0 以外的状态return` 无法访问?

我找到了以下代码补丁:

function some_fun() {    
#[...]
    [ -d ${MKAPP_BUILDDIR}/tmp ] || mkdir ${MKAPP_BUILDDIR}/tmp || return 1

    if [ $? -ne 0 ]; then   # never true?
            mount -t tmpfs none ${MKAPP_BUILDDIR}/tmp || return 1
    fi
}

据我了解,它会检查tmp构建目录中是否有目录,如果没有,则尝试创建它。如果也失败,则会退出函数,状态代码为 1。

如果是这种情况,那么在下面的 if 语句中检查不成功的退出代码不是毫无意义吗?之前不能有不成功的命令,因为它会导致函数返回并且 if 语句永远不会被处理。

我的想法正确吗,还是语法在欺骗我?

顺便说一句,我正在使用 bash。

答案1

是的,你是对的。该return过程将从函数中退出到脚本中的原始调用者,退出状态为 1。

因此该mount命令永远不会被处理。

要解决此问题,只需if .. then从 mount 命令中删除该语句即可:

[ -d ${MKAPP_BUILDDIR}/tmp ] || mkdir ${MKAPP_BUILDDIR}/tmp || return 1

mount -t tmpfs none ${MKAPP_BUILDDIR}/tmp || return 1

因此,如果无法创建目录:以状态 1 退出。
如果创建成功,则运行该mount命令。

相关内容