Ror*_*ory 17 linux bash shell mount umount
我正在写一个bash脚本并且我已经errexit
设置了,所以如果任何命令没有返回0退出代码,即如果任何命令没有成功完成,脚本将会死亡.这是为了确保我的bash脚本是健壮的.
我必须挂载一些文件系统,复制一些文件,然后卸载它.我umount /mnt/temp
在开始时就把它放在一边,以便在做任何事之前将它卸下来.但是,如果没有安装,则umount将失败并停止我的脚本.
有可能umount --dont-fail-if-not-mounted /mnt/temp
吗?如果未安装设备,它将返回0?喜欢rm -f
?
And*_*oss 38
忽略返回代码的标准技巧是将命令包装在一个总是求值为成功的布尔表达式中:
umount .... || /bin/true
Run Code Online (Sandbox Code Playgroud)
Dev*_*Dev 15
忽略退出代码并不真正安全,因为它无法区分已卸载的资源和卸载已安装资源的失败。
我建议测试路径是否已安装,mountpoint
当且仅当给定路径是已安装资源时才返回 0。
如果未安装给定路径,此脚本将以 0 退出,否则它将给出退出代码umount
。
#!/bin/sh
if mountpoint -q "$1"; then
umount "$1"
fi
Run Code Online (Sandbox Code Playgroud)
您也可以将其作为单行进行。
! mountpoint -q "$mymount" || umount "$mymount"
Run Code Online (Sandbox Code Playgroud)
假设umount
在未安装设备时返回1,您可以这样做:
umount … || [ $? -eq 1 ]
Run Code Online (Sandbox Code Playgroud)
然后bash将假定没有错误,如果umount
返回0或1(即成功卸载或设备未安装),但如果返回任何其他代码将停止脚本(例如,您没有权限卸载设备).