我找到了以下代码补丁:
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
命令。