Solución 1:
Evite usar /etc/mtab
porque puede ser inconsistente.
Evite las tuberías mount
porque no tiene por qué ser tan complicado.
Simplemente:
if grep -qs '/mnt/foo ' /proc/mounts; then
echo "It's mounted."
else
echo "It's not mounted."
fi
(El espacio después del /mnt/foo
es evitar la coincidencia, p. /mnt/foo-bar
.)
Solución 2:
if mountpoint -q /mnt/foo
then
echo "mounted"
else
echo "not mounted"
fi
o
mountpoint -q /mnt/foo && echo "mounted" || echo "not mounted"
Solución 3:
findmnt -rno SOURCE,TARGET "$1"
evita todos los problemas en las otras respuestas. Hace el trabajo limpiamente con solo un comando.
Otros enfoques tienen estas desventajas:
grep -q
ygrep -s
son un paso adicional innecesario y no se admiten en todas partes./proc/\*
no es compatible en todas partes. (mountpoint
también se basa en proc).mountinfo
se basa en /proc/..cut -f3 -d' '
desordena los espacios en los nombres de las rutas- Análisis de montaje El espacio en blanco de es problemático. Su página man ahora dice:
.. 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 guiones.
Funciones bash:
#These functions return exit codes: 0 = found, 1 = not found
isMounted () { findmnt -rno SOURCE,TARGET "$1" >/dev/null;} #path or device
isDevMounted () { findmnt -rno SOURCE "$1" >/dev/null;} #device only
isPathMounted() { findmnt -rno TARGET "$1" >/dev/null;} #path only
#where: -r = --raw, -n = --noheadings, -o = --output
Ejemplos de uso:
if isPathMounted "/mnt/foo bar"; #Spaces in path names are ok.
then echo "path is mounted"
else echo "path is not mounted"
fi
if isDevMounted "/dev/sdb4";
then echo "device is mounted"
else echo "device is not mounted"
fi
#Universal:
if isMounted "/mnt/foo bar";
then echo "device is mounted"
else echo "device is not mounted"
fi
if isMounted "/dev/sdb4";
then echo "device is mounted"
else echo "device is not mounted"
fi
Solución 4:
Un script como este nunca será portátil. Un secreto sucio en Unix es que solo el núcleo sabe dónde están los sistemas de archivos y, a falta de cosas como /proc (no portátil), nunca le dará una respuesta directa.
Normalmente uso df para descubrir cuál es el punto de montaje de un subdirectorio y en qué sistema de archivos se encuentra.
Por ejemplo (requiere posix shell como ash/AT&T ksh/bash/etc)
case $(df $mount)
in
$(df /)) echo $mount is not mounted ;;
*) echo $mount has a non-root filesystem mounted on it ;;
esac
Un poco te dice información útil.
Solución 5:
lo siguiente es lo que uso en uno de mis trabajos cron de copia de seguridad de rsync. verifica si /backup está montado e intenta montarlo si no lo está (puede fallar porque la unidad está en una bahía de intercambio en caliente y es posible que ni siquiera esté presente en el sistema)
NOTA:lo siguiente solo funciona en Linux, porque greps /proc/mounts; una versión más portátil ejecutaría 'mount | grep /backup', como en la respuesta de Matthew..
if ! grep -q /backup /proc/mounts ; then if ! mount /backup ; then echo "failed" exit 1 fi fi echo "suceeded." # do stuff here