为什么我的 bash 脚本没有收到来自 umount 的退出代码?

为什么我的 bash 脚本没有收到来自 umount 的退出代码?

这是我第一次尝试编写一个很长的 bash 脚本来管理我运行的服务器,并且当使用“设置-ex”卸载失败时,脚本退出。我以为我的 if 语句会捕获它,但脚本在触发 echo 之前就退出了。

我在这里忽略了什么?

umount $MOUNTPATH
if [[ $? -ne 0 ]];
then
  /bin/echo "Failed to unmount!  Already unmounted?"
fi

答案1

set -e命令失败后,shell 会立即退出。也就是说,命令unmount完成后立即退出。无法if捕获它,因为脚本在到达之前就退出了if。您可以通过将unmount命令if 条件(用否定表示,如果卸载失败则运行该子句,而不是卸载成功时!运行该子句):then

if ! unmount $MOUNTPATH; then
    /bin/echo "Failed to unmount!  Already unmounted?"
fi

答案2

问题是你的 if 语句后面有一个分号。

umount $MOUNTPATH
if [[ $? -ne 0 ]]
then
  /bin/echo "Failed to unmount!  Already unmounted?"
fi

这应该可以解决问题。

资料来源:http://bash.cyberciti.biz/guide/If_structures_to_execute_code_based_on_a_condition

相关内容