Non ti sei preso la briga di menzionare un O/S.
Ubuntu Linux 11.10 (e probabilmente le versioni più aggiornate di Linux) hanno il mountpoint
comando.
Ecco un esempio su uno dei miei server:
$ mountpoint /oracle
/oracle is a mountpoint
$ mountpoint /bin
/bin is not a mountpoint
In realtà, nel tuo caso, dovresti essere in grado di utilizzare il -q
opzione, come questa:
mountpoint -q /foo/bar || mount -o bind /some/directory/here /foo/bar
Spero di esserti stato d'aiuto.
Il manuale di mountpoint
dice che:
controlla se la directory o il file specificato è menzionato nel file /proc/self/mountinfo.
Il manuale di mount
dice che:
La modalità elenco viene mantenuta solo per compatibilità con le versioni precedenti. Per un output più affidabile e personalizzabile usa findmnt(8), specialmente nei tuoi script.
Quindi il comando corretto da usare è findmnt
, che a sua volta fa parte del util-linux
pacchetto e, secondo il manuale:
è in grado di cercare in /etc/fstab, /etc/mtab o /proc/self/mountinfo
Quindi in realtà cerca più cose di mountpoint
. Fornisce inoltre la comoda opzione:
-M, --mountpoint percorso
Definire in modo esplicito il file o la directory del punto di montaggio. Vedi anche --target.
In sintesi, per verificare se una directory è montata con bash, puoi usare:
if [[ $(findmnt -M "$FOLDER") ]]; then
echo "Mounted"
else
echo "Not mounted"
fi
Esempio:
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"
La mia soluzione:
is_mount() {
path=$(readlink -f $1)
grep -q "$path" /proc/mounts
}
Esempio:
is_mount /path/to/var/run/mydir/ || mount --bind /var/run/mydir/ /path/to/var/run/mydir/
Per la risposta di Mark J. Bobak, mountpoint
non funziona se montato con bind
opzione in un filesystem diverso.
Per la risposta di Christopher Neylan, non è necessario reindirizzare l'output di grep a /dev/null, basta usare grep -q
invece.
Il più importante, canonicalizzare il percorso utilizzando readlink -f $mypath
:
- Se controlli un percorso come
/path/to/dir/
termina con una barra rovesciata, il percorso in/proc/mounts
omount
l'output è/path/to/dir
- Nella maggior parte delle versioni di Linux,
/var/run/
è il collegamento simbolico di/run/
, quindi se monti bind per/var/run/mypath
e controlla se è montato, verrà visualizzato come/run/mypath
in/proc/mounts
.
Eseguendo il mount
comando senza argomenti ti dirà i mount correnti. Da uno script di shell, puoi controllare il punto di montaggio con grep
e un'istruzione if:
if mount | grep /mnt/md0 > /dev/null; then
echo "yay"
else
echo "nay"
fi
Nel mio esempio, l'istruzione if controlla il codice di uscita di grep
, che indica se c'era una corrispondenza. Dal momento che non voglio che l'output venga visualizzato quando c'è una corrispondenza, lo sto reindirizzando a /dev/null
.