Respostas:
Essa função bash será bloqueada até que o arquivo especificado apareça ou que um tempo limite seja atingido. O status de saída será 0 se o arquivo existir; caso contrário, o status de saída refletirá quantos segundos a função esperou.
wait_file() {
local file="$1"; shift
local wait_seconds="${1:-10}"; shift # 10 seconds as default timeout
until test $((wait_seconds--)) -eq 0 -o -f "$file" ; do sleep 1; done
((++wait_seconds))
}
E aqui está como você pode usá-lo:
# Wait at most 5 seconds for the server.log file to appear
server_log=/var/log/jboss/server.log
wait_file "$server_log" 5 || {
echo "JBoss log file missing after waiting for $? seconds: '$server_log'"
exit 1
}
Outro exemplo:
# Use the default timeout of 10 seconds:
wait_file "/tmp/examplefile.txt" && {
echo "File found."
}
until [ -f /tmp/examplefile.txt ]
do
sleep 5
done
echo "File found"
exit
A cada 5 segundos, ele será ativado e procurará o arquivo. Quando o arquivo aparecer, ele sairá do loop, informará que encontrou o arquivo e sairá (não é necessário, mas é arrumado).
Coloque isso em um script e inicie-o como script &
Isso o executará em segundo plano.
Pode haver diferenças sutis na sintaxe, dependendo do shell que você usa. Mas essa é a essência disso.