Как я могу ожидать в .profile сценарии, пока все устройства не смонтированы?

В моем .profile сценарий я хочу экспортировать переменную, если внешний жесткий диск USB смонтирован. Мне нужна эта переменная в более поздних сценариях Perl, чтобы определить, смонтировано ли устройство. Особенно, если устройство не смонтировано, более поздние сценарии ведут себя по-другому.

Так как эти скрипты Perl также запущены в среде Windows, я не могу просто проверить на существование каталога, когда скрипты запущены. Кроме того, сценарий работает на различных машинах, некоторым из которых иногда присоединяли жесткий диск. Когда жесткий диск будет присоединен, он не будет удален, пока машина не закрывается.

Кроме того, сценарии делают свое задание отлично, и я не изменил бы их.

Устройство смонтировано к /media/rene/DEVICE_NAME.

В моем корневом каталоге у меня есть символьная ссылка на точку монтирования:

ln -s /media/rene/DEVICE_NAME ~/ext_hd

Так, в моем ~/.script файл у меня есть следующий тест

if [[ -d ~/ext_hd ]]; then
   export device_mounted=yes
fi

Теперь, по-видимому, эти строки выполняются, прежде чем процесс монтирования закончен, монтируя внешний жесткий диск. Таким образом, переменная device_mounted не присвоен.

Так, есть ли способ ожидать процесса монтирования для окончания, прежде чем я выполню тест?

0
задан 3 February 2018 в 06:19

1 ответ

Как насчет того, чтобы запустить скрипт как демона?

#!/bin/sh
while true; do
    if mountpoint -q /media/rene/DEVICE_NAME; then
        export device_mounted=yes
    else
        unset device_mounted
    fi
    sleep 30
done

Править:

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

#!/bin/sh
while true; do
    if mountpoint -q /media/rene/DEVICE_NAME; then
        export device_mounted=yes
        break
    fi
    sleep 30
done

Сохраните это где-нибудь как, например. device-check.sh и сделайте исполняемый файл сценария:

chmod +x /path/to/device-check.sh

Затем включите эту строку ~/.profile:

/path/to/device-check.sh &

Запаздывание & символ важен. Это заставляет сценарий запуститься как отдельный процесс, позволяя процессу входа в систему продолжиться.

После этого сценарий запускается при входе в систему и проверяет каждую 30-ю секунду, если устройство смонтировано. Если/когда сценарий находит, что устройство смонтировано, это устанавливает переменную среды и концы.

2
ответ дан 31 October 2019 в 02:10

Другие вопросы по тегам:

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