![在 `command || 之后检查退出状态是否为 0 以外的状态return` 无法访问?](https://linux22.com/image/57997/%E5%9C%A8%20%60command%20%7C%7C%20%E4%B9%8B%E5%90%8E%E6%A3%80%E6%9F%A5%E9%80%80%E5%87%BA%E7%8A%B6%E6%80%81%E6%98%AF%E5%90%A6%E4%B8%BA%200%20%E4%BB%A5%E5%A4%96%E7%9A%84%E7%8A%B6%E6%80%81return%60%20%E6%97%A0%E6%B3%95%E8%AE%BF%E9%97%AE%EF%BC%9F.png)
我找到了以下代码补丁:
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
命令。