Как подождать файл в сценарии оболочки?

Я пытаюсь написать сценарий оболочки, который будет ждать появления файла в каталоге /tmp именем sleep.txt и как только он будет найден, программа перестанет работать, в противном случае я хочу, чтобы программа находилась в состоянии ожидания (приостановлено) пока файл не будет найден. Теперь я предполагаю, что я буду использовать тестовую команду. Итак, что-то вроде

 (if [ -f "/tmp/sleep.txt" ]; then stop else sleep.) 

Я новичок в написании сценария оболочки, и любая помощь очень ценится!

2 Solutions collect form web for “Как подождать файл в сценарии оболочки?”

В Linux вы можете использовать подсистему inotify для эффективного ожидания появления файла в каталоге:

 while read i; do if [ "$i" = sleep.txt ]; then break; fi; done \ < <(inotifywait -e create,open --format '%f' --quiet /tmp --monitor) # script execution continues ... 

(предполагая Bash для синтаксиса перенаправления вывода <() )

Преимущество такого подхода в сравнении с фиксированным интервалом времени, как в

 while [ ! -f /tmp/sleep.txt ]; do sleep 1; done # script execution continues ... 

что ядро ​​больше спит. С помощью спецификации события inotify, такого как create,open скрипт, только что запланированный для выполнения, когда файл под /tmp создается или открывается. С фиксированным интервалом времени вы теряете процессорные циклы для каждого приращения времени.

Я включил событие open чтобы зарегистрировать touch /tmp/sleep.txt когда файл уже существует.

Просто поместите свой тест в цикл while:

 while [ ! -f /tmp/sleep.txt ]; do sleep 1; done # next command 
  • как передать несколько команд в sqlite3 в одной команде оболочки liner
  • Как сделать фильтр более эффективным
  • Доступ к вторичным переменным
  • Заменить несколько строк в текстовом файле фиксированным шаблоном
  • Создать каталог в удаленном рабочем столе с функцией bash
  • Как нормализовать нерегулярные значения данных
  • Как перенаправить вывод команд Linux на конкретную строку и столбец в csv?
  • Что такое «команда» на bash?
  • Не может mv в подкаталог себя
  • Создание личного монтирования tmpfs в сценарии оболочки
  • Как добавить аудиофайл в сценарий оболочки
  • Interesting Posts

    Понимание grep и труб в linux

    Диалог аутентификации Gnome-shell не удается, как отлаживать, какое приложение использует его?

    Почему Linux (Mint 17.2, Ubuntu 14.04 на основе KDE) автоматически удаляет определенные пакеты при установке других?

    Как я могу определить, будет ли dd стирать мой жесткий диск?

    Список последовательных устройств на FreeBSD

    В чем разница между w и W в режиме эвакуации vim?

    Двойная настройка монитора на ноутбуке: внутренний монитор просматривает внешний экран

    Включение драйвера brcmfmac для Wi-Fi на Macbook Pro

    Соответствующая команда Debian для add-apt-repository?

    Не удается установить MariaDB и Mysql на одном компьютере?

    Как получить pkg_add для поиска в правильной директории в удаленном ftp-репозитории при установке vim?

    Портативный зашифрованный контейнер

    не может назначить ip-адрес из dhcp

    Отсутствует файл конфигурации для SSSD?

    Настройка RAID на работающем сервере Ubuntu 14.04

    Linux и Unix - лучшая ОС в мире.