traduccion script comandos bourne again bash unix shell

bash - script - bourne again shell



Cómo probar si una ruta determinada es un punto de montaje (9)

Supongamos que desea probar si / mnt / disk es un punto de montaje en un script de shell. ¿Cómo haces esto?


Aquí hay una variante con "df -P" que se supone que es portátil:

mat@owiowi:/tmp$ f(){ df -P | awk ''{ if($6 == "''$1''")print }'' ; } mat@owiowi:/tmp$ f / /dev/mapper/lvm0-vol1 20642428 17141492 2452360 88% / mat@owiowi:/tmp$ f /mnt mat@owiowi:/tmp$ f /mnt/media /dev/mapper/lvm0-media 41954040 34509868 7444172 83% /mnt/media


for mountedPath in `mount | cut -d '' '' -f 3`; do if [ "${mountedPath}" == "${wantedPath}" ]; then exit 0 fi done exit 1


if mount | cut -d '' '' -f 3 | grep ''^/mnt/disk$'' > /dev/null ; then ... fi

EDITAR: Usó la idea de Bombe para usar corte.


Descubrí que en mi Fedora 7 hay un comando de punto de montaje.

Desde el punto de montaje del hombre:

NAME mountpoint - see if a directory is a mountpoint SYNOPSIS /bin/mountpoint [-q] [-d] /path/to/directory /bin/mountpoint -x /dev/device

Aparentemente viene con el paquete sysvinit, no sé si este comando está disponible en otros sistemas.

[root@myhost~]# rpm -qf $(which mountpoint) sysvinit-2.86-17


Sin depender de mount , /etc/mtab , /proc/mounts , etc .:

if [ `stat -fc%t:%T "$dir"` != `stat -fc%t:%T "$dir/.."` ]; then echo "$dir is mounted" else echo "$dir is not mounted" fi

Cuando $dir es un punto de montaje, tiene un número de dispositivo diferente al de su directorio principal.

El beneficio sobre las alternativas enumeradas hasta ahora es que no tiene que analizar nada, y hace lo correcto si dir=/some//path/../with///extra/components .

El inconveniente es que no marca / como punto de montaje. Bueno, eso es bastante fácil para un caso especial, pero aún así.


Lamentablemente, tanto mountpoint como stat tendrán el efecto secundario de MONTAR el directorio que está probando si está utilizando automount. O al menos lo hace para mí en Debian usando auto cifs en un disco en red WD MyBookLive. Terminé con una variante de las / proc / mounts hechas más complejas porque cada montura POTENCIAL ya está en / proc / mounts incluso si no está realmente montado.

cut -d '' '' -f 1 < /proc/mounts | grep -q ''^//disk/Public$'' && umount /tmp/cifs/disk/Public

Where ''disk'' is the name of the server (networked disk) in /etc/hosts. ''//disk/Public'' is the cifs share name ''/tmp/cifs'' is where my automounts go (I have /tmp as RAM disk and / is read-only) ''/tmp/cifs/disk'' is a normal directory created when the server (called ''disk'') is live. ''/tmp/cifs/disk/Public'' is the mount point for my ''Public'' share.


Usando GNU find

find <directory> -maxdepth 0 -printf "%D"

dará el número de dispositivo del directorio. Si difiere entre el directorio y su padre, entonces tiene un punto de montaje.

Agregar /. en el nombre del directorio si desea que los enlaces simbólicos a diferentes sistemas de archivos cuenten como puntos de montaje (siempre lo querrá para el padre).

Desventajas: utiliza GNU encuentra tan menos portátil

Ventajas: Informes de puntos de montaje no registrados en / etc / mtab.


df $path_in_question | grep " $path_in_question$"

Esto establecerá $? al finalizar


mount | awk ''$3 == "/pa/th" {print $1}''

Vacío si no es un punto de montaje ^^