No te molestaste en mencionar un O/S.
Ubuntu Linux 11.10 (y probablemente las versiones más actualizadas de Linux) tienen el mountpoint
comando.
Aquí hay un ejemplo en uno de mis servidores:
$ mountpoint /oracle
/oracle is a mountpoint
$ mountpoint /bin
/bin is not a mountpoint
En realidad, en su caso, debería poder usar el -q
opción, así:
mountpoint -q /foo/bar || mount -o bind /some/directory/here /foo/bar
Espero que ayude.
El manual de mountpoint
dice que:
comprueba si el directorio o archivo dado se menciona en el archivo /proc/self/mountinfo.
El manual de mount
dice que:
El modo de listado se mantiene solo por compatibilidad con versiones anteriores. Para una salida más robusta y personalizable, use findmnt(8), especialmente en sus scripts.
Entonces el comando correcto a usar es findmnt
, que es en sí mismo parte del util-linux
paquete y, según el manual:
puede buscar en /etc/fstab, /etc/mtab o /proc/self/mountinfo
Así que en realidad busca más cosas que mountpoint
. También proporciona la opción conveniente:
-M, --mountpoint ruta
Defina explícitamente el archivo o directorio del punto de montaje. Véase también --objetivo.
En resumen, para verificar si un directorio está montado con bash, puede usar:
if [[ $(findmnt -M "$FOLDER") ]]; then
echo "Mounted"
else
echo "Not mounted"
fi
Ejemplo:
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"
Mi solución:
is_mount() {
path=$(readlink -f $1)
grep -q "$path" /proc/mounts
}
Ejemplo:
is_mount /path/to/var/run/mydir/ || mount --bind /var/run/mydir/ /path/to/var/run/mydir/
Para la respuesta de Mark J. Bobak, mountpoint
no funciona si se monta con bind
opción en un sistema de archivos diferente.
Para la respuesta de Christopher Neylan, no es necesario redirigir la salida de grep a /dev/null, solo use grep -q
en su lugar.
Lo más importante, canonicalizar la ruta usando readlink -f $mypath
:
- Si marca una ruta como
/path/to/dir/
terminar con barra invertida, la ruta en/proc/mounts
omount
la salida es/path/to/dir
- En la mayoría de versiones de Linux,
/var/run/
es el enlace simbólico de/run/
, por lo que si monta bind para/var/run/mypath
y verifique si se montó, se mostrará como/run/mypath
en/proc/mounts
.
Ejecutando el mount
El comando sin argumentos le dirá los montajes actuales. Desde un script de shell, puede verificar el punto de montaje con grep
y una sentencia if:
if mount | grep /mnt/md0 > /dev/null; then
echo "yay"
else
echo "nay"
fi
En mi ejemplo, la instrucción if verifica el código de salida de grep
, que indica si hubo una coincidencia. Como no quiero que se muestre el resultado cuando hay una coincidencia, lo redirijo a /dev/null
.