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

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

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

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

В 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