Neobtěžoval jste se zmínit O/S.
Ubuntu Linux 11.10 (a pravděpodobně nejaktuálnější verze Linuxu) má mountpoint
příkaz.
Zde je příklad na jednom z mých serverů:
$ mountpoint /oracle
/oracle is a mountpoint
$ mountpoint /bin
/bin is not a mountpoint
Ve vašem případě byste měli být schopni použít -q
možnost, jako je tato:
mountpoint -q /foo/bar || mount -o bind /some/directory/here /foo/bar
Doufám, že to pomůže.
Příručka z mountpoint
říká, že:
zkontroluje, zda je daný adresář nebo soubor zmíněn v souboru /proc/self/mountinfo.
Příručka z mount
říká, že:
Režim výpisu je zachován pouze pro zpětnou kompatibilitu. Pro robustnější a přizpůsobitelný výstup použijte findmnt(8), zejména ve vašich skriptech.
Takže správný příkaz k použití je findmnt
, který je sám součástí util-linux
balíček a podle manuálu:
je schopen vyhledávat v /etc/fstab, /etc/mtab nebo /proc/self/mountinfo
Takže ve skutečnosti prohledává více věcí než mountpoint
. Poskytuje také pohodlnou možnost:
-M, --mountpoint cesta
Explicitně definujte soubor nebo adresář bodu připojení. Viz také --target.
Stručně řečeno, ke kontrole, zda je adresář připojen pomocí bash, můžete použít:
if [[ $(findmnt -M "$FOLDER") ]]; then
echo "Mounted"
else
echo "Not mounted"
fi
Příklad:
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"
Moje řešení:
is_mount() {
path=$(readlink -f $1)
grep -q "$path" /proc/mounts
}
Příklad:
is_mount /path/to/var/run/mydir/ || mount --bind /var/run/mydir/ /path/to/var/run/mydir/
Pro odpověď Marka J. Bobaka mountpoint
nefunguje při připojení s bind
možnost v jiném souborovém systému.
Pro odpověď Christophera Neylana není nutné přesměrovat výstup grepu do /dev/null, stačí použít grep -q
místo toho.
Nejdůležitější je kanonizovat cestu pomocí readlink -f $mypath
:
- Pokud zaškrtnete cestu, například
/path/to/dir/
končí zpětným lomítkem, cesta v/proc/mounts
nebomount
výstup je/path/to/dir
- Ve většině linuxových verzí
/var/run/
je symbolický odkaz/run/
, takže pokud připojíte vazbu pro/var/run/mypath
a zkontrolujte, zda je připojeno, zobrazí se jako/run/mypath
v/proc/mounts
.
Spuštění mount
příkaz bez argumentů vám řekne aktuální připojení. Ze skriptu shellu můžete zkontrolovat bod připojení pomocí grep
a příkaz if:
if mount | grep /mnt/md0 > /dev/null; then
echo "yay"
else
echo "nay"
fi
V mém příkladu příkaz if kontroluje výstupní kód grep
, což označuje, zda došlo ke shodě. Protože nechci, aby se výstup zobrazoval při shodě, přesměruji ho na /dev/null
.