Vous n'avez pas pris la peine de mentionner un O/S.
Ubuntu Linux 11.10 (et probablement les versions les plus récentes de Linux) ont le mountpoint
commande.
Voici un exemple sur un de mes serveurs :
$ mountpoint /oracle
/oracle is a mountpoint
$ mountpoint /bin
/bin is not a mountpoint
En fait, dans votre cas, vous devriez pouvoir utiliser le -q
option, comme ceci :
mountpoint -q /foo/bar || mount -o bind /some/directory/here /foo/bar
J'espère que ça aide.
Le manuel de mountpoint
dit qu'il :
vérifie si le répertoire ou le fichier donné est mentionné dans le fichier /proc/self/mountinfo.
Le manuel de mount
dit que :
Le mode de liste est maintenu uniquement pour la compatibilité descendante. Pour une sortie plus robuste et personnalisable, utilisez findmnt(8), en particulier dans vos scripts.
Donc la commande correcte à utiliser est findmnt
, qui fait lui-même partie du util-linux
paquet et, selon le manuel :
est capable de rechercher dans /etc/fstab, /etc/mtab ou /proc/self/mountinfo
Donc, il recherche en fait plus de choses que mountpoint
. Il fournit également l'option pratique :
-M, --mountpoint chemin
Définissez explicitement le fichier ou le répertoire du point de montage. Voir aussi --target.
En résumé, pour vérifier si un répertoire est monté avec bash, vous pouvez utiliser :
if [[ $(findmnt -M "$FOLDER") ]]; then
echo "Mounted"
else
echo "Not mounted"
fi
Exemple :
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"
Ma solution :
is_mount() {
path=$(readlink -f $1)
grep -q "$path" /proc/mounts
}
Exemple :
is_mount /path/to/var/run/mydir/ || mount --bind /var/run/mydir/ /path/to/var/run/mydir/
Pour la réponse de Mark J. Bobak, mountpoint
ne fonctionne pas si montage avec bind
option dans un système de fichiers différent.
Pour la réponse de Christopher Neylan, il n'est pas nécessaire de rediriger la sortie de grep vers /dev/null, utilisez simplement grep -q
à la place.
Le plus important, canonisez le chemin en utilisant readlink -f $mypath
:
- Si vous vérifiez le chemin tel que
/path/to/dir/
se termine par une barre oblique inverse, le chemin en/proc/mounts
oumount
la sortie est/path/to/dir
- Dans la plupart des versions Linux,
/var/run/
est le lien symbolique de/run/
, donc si vous montez bind pour/var/run/mypath
et vérifiez s'il est monté, il s'affichera sous la forme/run/mypath
en/proc/mounts
.
Exécuter le mount
La commande sans arguments vous indiquera les montages actuels. À partir d'un script shell, vous pouvez vérifier le point de montage avec grep
et une instruction if :
if mount | grep /mnt/md0 > /dev/null; then
echo "yay"
else
echo "nay"
fi
Dans mon exemple, l'instruction if vérifie le code de sortie de grep
, qui indique s'il y a eu une correspondance. Comme je ne veux pas que la sortie s'affiche lorsqu'il y a une correspondance, je la redirige vers /dev/null
.