BASH Размонтировать несколько дисков - PullRequest
0 голосов
/ 02 ноября 2011

Я работаю над сценарием локального входа для некоторых клиентов Macintosh. Я хотел бы размонтировать несколько дисков на машине, прежде чем пытаться их смонтировать, аналогично тому, что я делаю на клиентах Windows. Ниже приведен код, который у меня есть; Тем не менее, мне было любопытно, есть ли способ оптимизировать это или сжать код?

if [ -d "/Volumes/Share1" ]; then
    umount -f /Volumes/Share1
fi

if [ -d "/Volumes/Share2" ]; then
    umount -f /Volumes/Share2
fi

if [ -d "/Volumes/Share3" ]; then
    umount -f /Volumes/Share3
fi

Это просто кажется громоздким и грязным, и я не уверен, как это сделать лучше.

Ответы [ 3 ]

2 голосов
/ 02 ноября 2011

Возможно что-то вроде

VOLUMES="/Volumes/Share1 /Volumes/Share2 /Volumes/Share3"

for volume in $VOLUMES ; do
 [ -d $volume ] && umount -f $volume
done

(Вам понадобятся некоторые модификации для обработки имен с пробелами в них)

2 голосов
/ 02 ноября 2011

А для цикла?

for dir in /Volumes/Share[123]; do 
  if [ -d "$dir" ] ; then
    umount -f $dir
  fi
done

В реальной жизни это вряд ли будет Share[123], с которым вы хотите иметь дело, поэтому я ожидаю, что вы захотите поместить в него фактический список, например

for dir in "/Volumes/My Share" "/Volumes/pr0n" "/Volumes/warez"; do

и т.д.

0 голосов
/ 02 ноября 2011

Вы всегда можете использовать функции для уменьшения дублирования:

unmount_if_necessary() {
    [ -d "$1" ] && umount -f "$1"
}

unmount_if_necessary /Volumes/Share1
unmount_if_necessary /Volumes/Share2
#...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...