Как проверить, смонтирована ли файловая система со сценарием

Методом проб и ошибок я выяснил, что следующее переопределение работает:

(defun show-notification (notification)
"Show notification. Use notify-send."
(start-process "tea-time-notify-notification" nil "notify-send" notification)
)

Более необычный материал может быть сделан также: использование

(start-process "tea-time-notify-notification" nil "notify-send" "-i" (expand-file-name "~/path/to/your/icon/YourIconName.png") "Emacs Tea Timer" notification)

говорит демону уведомления использовать значок (этот подходит) во всплывающем окне уведомления, и использует ободренный 'сводный' текст ("Таймер Чая Emacs").

19
17.05.2012, 19:18
6 ответов

Можно проверить код состояния mount, и большинство правильно написанных исполняемых файлов, с оболочкой специальный параметр ?.

От man bash:

? Expands to the exit status of the most recently executed foreground pipeline.

После выполнения mount команда, сразу выполнившись echo $? распечатает код состояния от предыдущей команды.

# mount /dev/dvd1 /mnt
  mount: no medium found on /dev/sr0
# echo $?
  32

Не все исполняемые файлы имеют четко определенные коды состояния. Как минимум это должно выйти с успехом (0) или отказом (1) код, но это не всегда имеет место.

Чтобы подробно остановиться (и корректный) на Вашем сценарии в качестве примера, я добавил вложенный if создайте для ясности. Это не единственный способ протестировать код состояния и выполнить действие, но является самым легким читать при изучении.

#!/bin/bash
mount="/myfilesystem"

if grep -qs "$mount" /proc/mounts; then
  echo "It's mounted."
else
  echo "It's not mounted."
  mount "$mount"
  if [ $? -eq 0 ]; then
   echo "Mount success!"
  else
   echo "Something went wrong with the mount..."
  fi
fi

Для получения дополнительной информации о "Выходе и Статусе выхода", можно обратиться к Усовершенствованному Руководству по созданию сценариев Bash.

20
27.01.2020, 19:44
  • 1
    Там не является никакой потребностью экспортировать $MOUNT. Этот сценарий также повредится, если файловая система будет иметь какой-либо символ, который подвергся бы wordsplitting (пробелы, и т.д.). Необходимо всегда заключать расширения в кавычки. –  Chris Down 17.05.2012, 21:49
  • 2
    @ChrisDown Вы правы. Я только удалил очевидное свисание'; затем'. В будущем не стесняйтесь редактировать мой ответ для создания этого более корректным. –  George M 17.05.2012, 22:30
  • 3
    Er... это все еще повредится. Вы все еще не заключили расширения в кавычки. На Вашем совете я сделаю это теперь. –  Chris Down 17.05.2012, 23:14
  • 4
    , который я также не рекомендовал бы связать с печально известным "Усовершенствованным" руководством по созданию сценариев Bash, это полно ошибок и будет учить людей писать ошибки, не сценарии. BashGuide является намного лучшей альтернативой. –  Chris Down 17.05.2012, 23:15
  • 5
    , который я также не рекомендовал бы связать с печально известным "Усовершенствованным" руководством по созданию сценариев Bash, это полно ошибок и будет учить людей писать ошибки, не сценарии. BashGuide является намного лучшей альтернативой. –  Chris Down 17.05.2012, 23:15
  • 6
    @ChrisDown "разделение Word съест Ваших младенцев, если Вы не заключите вещи в кавычки правильно". Слова для проживания. –  George M 18.05.2012, 00:25

Много дистрибутивов Linux имеют mountpoint команда. Это может явно используемый, чтобы проверить, является ли каталог точкой монтирования. Простой как это:

#!/bin/bash    
if mountpoint -q "$1"; then
    echo "$1 is a mountpoint"
else
    echo "$1 is not a mountpoint"
fi
36
27.01.2020, 19:44
  • 1
    Этот подход перестанет работать, при попытке проверить encfs, так как Вы споткнетесь в отклоненную ошибку разрешения, когда выполнено некорневым пользователем. –  Denys S. 01.12.2015, 10:40
  • 2
    Мое решение работает с encfs. –  Theodore R. Smith 22.03.2018, 18:13

Самый простой способ, не требующий root,:

if $(df | grep -q /mnt/ramdisk); then

fi

или чтобы убедиться, что он не установлен:

if ! $(df | grep -q /mnt/ramdisk); then

fi
2
27.01.2020, 19:44

Краткие утверждения

Проверьте , если установлен:

mount|grep -q "/mnt/data" && echo "/mnt/data is mounted; I can follow my job!"

Проверьте , если он не установлен:

mount|grep -q "/mnt/data" || echo "/mnt/data is not mounted I could probably mount it!"
2
27.01.2020, 19:44

Я пробовал использовать приведенный ниже скрипт

#!/bin/bash
echo "enter the file system to check whether its mounted or not"
read p
echo $p
for i in `cat /proc/mounts`
do
if [[ $p =~ $i ]]
then
echo "$p is mounted"
else
echo "$p is not mounted"
fi
done

Вам нужно ввести только имя файловой системы

0
27.01.2020, 19:44

Я попробовал следующее, и это сработало. Это элементарно, надеюсь, я смогу вам помочь.

#!/bin/bash
for i in /tmp/demo.txt /etc/demo.xt /var/demo.txt /var/log/demo.txt /opt/demo.txt /demo.txt
do
touch $i
if [ -f $i ];
then
rm $i
echo "FS bien! $i"
else
message="FS es R/O!"
echo '${message} $i' 
fi
done

Вывод сценария.

FS es R/O! /tmp/demo.txt
FS bien! /etc/demo.xt
FS bien! /var/demo.txt
FS bien! /var/log/demo.txt
FS bien! /opt/demo.txt
FS bien! /demo.txt
0
16.04.2020, 15:06

Теги

Похожие вопросы