Bash: Poll para criação de um arquivo e finalizar se sair

1

Estou tentando escrever um script que captura um sinal de saída e termina. Em vez de usar o método usual de captura bash, eu gostaria de monitorar a criação de um arquivo a cada 10 segundos e limpar algumas coisas antes da finalização.

Veja o que tentei:

poll_time=10 // poll every 10 seconds
((term_time=$SECONDS+240)) // monitor until 4 min from current script time exec

while (( $SECONDS < $term_time)) do
    if [[ -r $some_path/file.txt ]]; then
        cleanup_function
        exit
fi
sleep ${poll_time}
done

//if file doesnt exit continue with below code
//blah blah blah ....

Existe uma maneira melhor de fazer isso? será que as linhas acima do código funcionam?

    
por richie 28.10.2015 / 16:58

1 resposta

5

inotifywait de inotify-tools é o que você precisa (para olhar pelo menos). Uma linha como essa fará o mesmo truque que seu script pretende:

inotifywait -e create --timeout 240 "${some_path}/file.txt" && { cleanup_function; exit ; }

com a diferença inotifywait funciona de maneira baseada em eventos, portanto, não é necessário fazer pesquisas ou dormir.

    
por 28.10.2015 / 17:28