解決策 1:
/etc/mtab
の使用を避ける 一貫性がない可能性があるためです。
mount
のパイプを避ける それほど複雑である必要はないからです。
簡単に:
if grep -qs '/mnt/foo ' /proc/mounts; then
echo "It's mounted."
else
echo "It's not mounted."
fi
(/mnt/foo
の後のスペース 一致を避けることです。 /mnt/foo-bar
.)
解決策 2:
if mountpoint -q /mnt/foo
then
echo "mounted"
else
echo "not mounted"
fi
または
mountpoint -q /mnt/foo && echo "mounted" || echo "not mounted"
解決策 3:
findmnt -rno SOURCE,TARGET "$1"
他の回答のすべての問題を回避します。たった 1 つのコマンドでジョブをきれいに実行します。
他のアプローチには次の欠点があります:
grep -q
とgrep -s
不要な手順であり、どこでもサポートされているわけではありません。/proc/\*
どこでもサポートされているわけではありません。 (mountpoint
も proc に基づいています)。mountinfo
/proc/.. に基づいていますcut -f3 -d' '
パス名のスペースを台無しにする- マウントを解析しています の空白が問題です。 man ページには次のように書かれています:
.. リスティング モードは下位互換性のためにのみ維持されています。
より堅牢でカスタマイズ可能な出力については、findmnt を使用してください (8)、特にスクリプトで。
バッシュ関数:
#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
使用例:
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
解決策 4:
このようなスクリプトは移植性がありません。 Unix の汚い秘密は、カーネルだけがどのファイルシステムがどこにあるかを知っているということです。/proc (移植可能ではない) のようなものを除けば、決して直接的な答えを与えることはありません.
私は通常 df を使用して、サブディレクトリのマウント ポイントが何であるか、およびそれがどのファイル システムにあるかを検出します。
たとえば (ash / AT&T ksh / bash / などの posix シェルが必要)
case $(df $mount)
in
$(df /)) echo $mount is not mounted ;;
*) echo $mount has a non-root filesystem mounted on it ;;
esac
ちょっと有益な情報を教えてくれます。
解決策 5:
以下は、rsync バックアップ cron ジョブの 1 つで使用するものです。 /backup がマウントされているかどうかを確認し、マウントされていない場合はマウントを試みます (ドライブがホットスワップ ベイにあり、システムに存在しない可能性があるため、失敗する可能性があります)
注:以下は、/proc/mounts を grep するため、Linux でのみ機能します。より移植性の高いバージョンでは、'mount |マシューの答えのように、grep /backup'..
if ! grep -q /backup /proc/mounts ; then if ! mount /backup ; then echo "failed" exit 1 fi fi echo "suceeded." # do stuff here