В системах Linux есть /bin/mountpoint
которую можно использовать для проверки того, является ли конкретный каталог точкой монтирования для тома. У Mac OS X есть эквивалентная программа, или есть какой-то другой способ выполнить эту проверку?
2 ответа
Вы можете проанализировать вывод команды mount
для каталога, который вы хотите проверить (после on
, заключенного в пробел). Это не может обрабатывать разные пути из-за символических ссылок. Решение доступно здесь , но оно усложняет этот подход.
В качестве альтернативы, прочитайте код diskutil info
, если он не равен нулю, это не точка монтирования.
#!/usr/bin/env bash
[[ $# -eq 1 ]] || { echo "Exactly one argument expected, got $#" ; exit 1 ; }
[[ -d "$1" ]] || { echo "First argument expected to be directory" ; exit 1 ; }
diskutil info "$1" >/dev/null
RC=$?
if [[ $RC -eq 0 ]] ; then
echo "$1 is a mount point"
else
echo "$1 is not a mount point"
fi
exit $RC
Если по какой-либо причине вам нужна реальная точка монтирования, сделайте следующее:
- Скачать исходники для sysvinit отсюда.
- Откройте
src/mountpoint.c
в любом текстовом редакторе и добавьте#include <sys/types.h>
- Убедитесь, что у вас установлен Xcode и его инструменты командной строки
- Запустите
cc mountpoint.c -o mountpoint && sudo cp mountpoint /bin
- При желании скопируйте
man/mountpoint.1
в/usr/share/man/man1
.
Вы можете использовать команду df
чтобы получить узел устройства и точку монтирования для любого каталога.
Чтобы получить только точку монтирования, используйте:
df "/path/to/any/dir/you/need" | sed -nE -e' s|^.+% +(/.*$)|\1|p'
Эта конструкция sed используется для получения точки монтирования, которая может включать пространство в пути. Обратите внимание на использование расширенной команды регулярного выражения OS X '-E', которая также неофициально поддерживается GNU sed (как опция GNU sed '-r'). Портативная команда:
df "/path/to/any/dir/you/need" | sed -n -e' s|^.*% \{1,\}\(/.*$\)|\1|p'
Вы можете использовать его в функциях bash:
get_mount_point() {
local result="$(df "$1" | sed -n -e' s|^.*% \{1,\}\(/.*$\)|\1|p' 2>/dev/null)" || return 2
[[ -z "$result" ]] && return 1
echo "$result"
}
is_mount_point() {
[[ -z "$1" ]] && return 2
[[ "$1" != "$(get_mount_point "$1")" ]] && return 1
return 0
}