わざわざ O/S について言及しませんでした。
Ubuntu Linux 11.10 (およびおそらく最新の Linux フレーバー) には mountpoint
があります コマンド。
これは私のサーバーの 1 つでの例です:
$ mountpoint /oracle
/oracle is a mountpoint
$ mountpoint /bin
/bin is not a mountpoint
実際、あなたの場合、 -q
を使用できるはずです オプション、次のように:
mountpoint -q /foo/bar || mount -o bind /some/directory/here /foo/bar
お役に立てば幸いです。
mountpoint
のマニュアル
指定されたディレクトリまたはファイルが /proc/self/mountinfo ファイルに記載されているかどうかを確認します。
mount
のマニュアル 言います:
リスティング モードは、下位互換性のためにのみ維持されています。より堅牢でカスタマイズ可能な出力を得るには、特にスクリプトで findmnt(8) を使用してください。
したがって、使用する正しいコマンドは findmnt
です 、それ自体が util-linux
の一部です パッケージと、マニュアルによると:
/etc/fstab、/etc/mtab、または /proc/self/mountinfo で検索できます
したがって、実際には mountpoint
よりも多くのものを検索します .また、便利なオプションも提供します:
-M, --mountpoint パス
マウントポイント ファイルまたはディレクトリを明示的に定義します。 --target も参照してください。
要約すると、ディレクトリが bash でマウントされているかどうかを確認するには、次を使用できます。
if [[ $(findmnt -M "$FOLDER") ]]; then
echo "Mounted"
else
echo "Not mounted"
fi
例:
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"
私の解決策:
is_mount() {
path=$(readlink -f $1)
grep -q "$path" /proc/mounts
}
例:
is_mount /path/to/var/run/mydir/ || mount --bind /var/run/mydir/ /path/to/var/run/mydir/
Mark J. Bobak の回答については、mountpoint
bind
でマウントすると動作しません 別のファイルシステムのオプション。
Christopher Neylan の回答では、grep の出力を /dev/null にリダイレクトする必要はなく、grep -q
を使用するだけです
最も重要なのは、readlink -f $mypath
を使用してパスを正規化することです :
/path/to/dir/
などのパスを確認すると バックスラッシュで終わり、/proc/mounts
のパス またはmount
出力は/path/to/dir
です- ほとんどの Linux リリースでは、
/var/run/
/run/
のシンボリックリンクです 、したがって、バインドを/var/run/mypath
にマウントすると マウントされているかどうかを確認すると、/run/mypath
と表示されます/proc/mounts
で .
mount
の実行 引数なしのコマンドは、現在のマウントを教えてくれます。シェル スクリプトから、grep
でマウント ポイントを確認できます。 および if ステートメント:
if mount | grep /mnt/md0 > /dev/null; then
echo "yay"
else
echo "nay"
fi
私の例では、if ステートメントは grep
の終了コードをチェックしています。 、一致したかどうかを示します。一致したときに出力を表示したくないので、 /dev/null
にリダイレクトしています .