No Linux, você pode usar o subsistema de kernel inotify para aguardar com eficiência a aparência de um arquivo em um diretório:
while read i; do if [ "$i" = sleep.txt ]; then break; fi; done \
< <(inotifywait -e create,open --format '%f' --quiet /tmp --monitor)
# script execution continues ...
(supondo Bash para a sintaxe de redirecionamento de saída <()
)
A vantagem desta abordagem em comparação com o polling de intervalo de tempo fixo como em
while [ ! -f /tmp/sleep.txt ]; do sleep 1; done
# script execution continues ...
é que o kernel dorme mais. Com uma especificação de evento inotify como create,open
, o script é apenas planejado para execução quando um arquivo em /tmp
é criado ou aberto. Com o polling de intervalo de tempo fixo, você desperdiça ciclos de CPU para cada incremento de tempo.
Eu incluí o evento open
para também registrar touch /tmp/sleep.txt
quando o arquivo já existe.