findmnt -rno SOURCE,TARGET "$1"
他の回答のすべての問題を回避します。1つのコマンドでジョブをきれいに実行します。
他のアプローチには次のような欠点があります。
grep -q
そしてgrep -s
余分な不要なステップであり、どこでもサポートされていません。
/proc/\*
どこでもサポートされていません。
mountinfo
/ proc /。に基づいています。
cut -f3 -d' '
パス名のスペースをめちゃくちゃにする
- mountの空白の解析には問題があります。マニュアルページには次のように記載されています。
..リストモードは、後方互換性のためにのみ維持されています。
より堅牢でカスタマイズ可能な出力を得るには、特にスクリプトで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