I'm writing a bash script and I have errexit
set, so that the script will die if any command doesn't return a 0 exit code, i.e. if any command doesn't complete successfully. This is to make sure that my bash script is robust.
I have to mount some filesystems, copy some files over, the umount it. I'm putting a umount /mnt/temp
at the start so that it'll umount it before doing anything. However if it's not mounted then umount will fail and stop my script.
Is it possible to do a umount --dont-fail-if-not-mounted /mnt/temp
? So that it will return 0 if the device isn't mounted? Like rm -f
?
Using the mount Command One way we can determine if a directory is mounted is by running the mount command and filtering the output. The above line will exit with 0 (success) if /mnt/backup is a mount point. Otherwise, it'll return -1 (error).
You need to use any one of the following command to see mounted drives under Linux operating systems. [a] df command – Shoe file system disk space usage. [b] mount command – Show all mounted file systems. /proc/mounts or /proc/self/mounts file – Show all mounted file systems.
Assuming that your umount
returns 1 when device isn't mounted, you can do it like that:
umount … || [ $? -eq 1 ]
Then bash will assume no error if umount
returns 0 or 1 (i.e. unmounts successfully or device isn't mounted) but will stop the script if any other code is returned (e.g. you have no permissions to unmount the device).
The standard trick to ignore the return code is to wrap the command in a boolean expression that always evaluates to success:
umount .... || /bin/true
Ignoring exit codes isn't really safe as it won't distinguish between something that is already unmounted and a failure to unmount a mounted resource.
I'd recommend testing that the path is mounted with mountpoint
which returns 0 if and only if the given path is a mounted resource.
This script will exit with 0 if the given path was not mounted otherwise it give the exit code from umount
.
#!/bin/sh
if mountpoint -q "$1"; then
umount "$1"
fi
You an also do it as a one liner.
! mountpoint -q "$mymount" || umount "$mymount"
I just found the ":" more use ful and wanted a similar solution but let the script know whats happening.
umount ...... || { echo "umount failed but not to worry" ; : ; }
This returns true with the message, though the umount failed.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With