while : ; do
[[ -f "/path/to/file" ]] && break
echo "Pausing until file exists."
sleep 1
done
Sem usar algo como inotify , esse é o limite do que você poderá fazer.
O while acima apenas usa : como sua condicional, o que significa apenas "fazer até matarmos".
A linha importante é o teste [[ . O teste condicional aqui não usa a instrução if . Isso ocorre porque [[ é um comando real e NÃO parte da instrução if . Isso executa [[ -f "/path/to/file" ]] e o && verifica o status de saída do comando [[ e executa a seguinte instrução, se esse status de saída for 0 (sucesso). A seguinte declaração aqui é break , que fechará o loop atual em que seu script está.
Observação: em bash , é altamente recomendável usar [[ em vez de [ . Ele tem todos os recursos de [ , mas é muito mais poderoso e simples de usar.