Check if directory mounted with bash
You didn't bother to mention an O/S.
Ubuntu Linux 11.10 (and probably most up-to-date flavors of Linux) have the mountpoint
command.
Here's an example on one of my servers:
$ mountpoint /oracle
/oracle is a mountpoint
$ mountpoint /bin
/bin is not a mountpoint
Actually, in your case, you should be able to use the -q
option, like this:
mountpoint -q /foo/bar || mount -o bind /some/directory/here /foo/bar
Hope that helps.
Running the mount
command without arguments will tell you the current mounts. From a shell script, you can check for the mount point with grep
and an if-statement:
if mount | grep /mnt/md0 > /dev/null; then
echo "yay"
else
echo "nay"
fi
In my example, the if-statement is checking the exit code of grep
, which indicates if there was a match. Since I don't want the output to be displayed when there is a match, I'm redirecting it to /dev/null
.
The manual of mountpoint
says that it:
checks whether the given directory or file is mentioned in the /proc/self/mountinfo file.
The manual of mount
says that:
The listing mode is maintained for backward compatibility only. For more robust and customizable output use findmnt(8), especially in your scripts.
So the correct command to use is findmnt
, which is itself part of the util-linux
package and, according to the manual:
is able to search in /etc/fstab, /etc/mtab or /proc/self/mountinfo
So it actually searches more things than mountpoint
. It also provides the convenient option:
-M, --mountpoint path
Explicitly define the mountpoint file or directory. See also --target.
In summary, to check whether a directory is mounted with bash, you can use:
if [[ $(findmnt -M "$FOLDER") ]]; then
echo "Mounted"
else
echo "Not mounted"
fi
Example:
mkdir -p /tmp/foo/{a,b}
cd /tmp/foo
sudo mount -o bind a b
touch a/file
ls b/ # should show file
rm -f b/file
ls a/ # should show nothing
[[ $(findmnt -M b) ]] && echo "Mounted"
sudo umount b
[[ $(findmnt -M b) ]] || echo "Unmounted"