Eu sugeriria o seguinte script, no qual fiz algumas alterações:
- usou nomes de variáveis minúsculas
- atribuiu uma variável "desistir" com uma expressão soletrada de "5 horas em segundos"
- parametrizou o arquivo a ser monitorado na variável
filetomonitor
- alterou o loop
while true
para um loop de 5 horas, com base no comportamento da variávelSECONDS
bash, que conta o número de segundos desde que o shell foi iniciado. Isso começa no zero quando o script de shell é exibido. - alterou os backticks para o novo
$( ... )
form
O script atualizado:
#!/bin/bash
giveup=$((5 * 60 * 60))
filetomonitor='/tmp/file-to-monitor'
ltime=$(stat -c %Z "$filetomonitor")
while [[ "$SECONDS" -lt "$giveup" ]]
do
atime=$(stat -c %Z "$filetomonitor")
if [[ "$atime" -ne "$ltime" ]]
then
echo Take action
break ## if we're only supposed to act once
ltime=$atime
fi
sleep 5
done
Eu deixei o break
lá, mas comentei. Se você quiser que o script saia (antes das 5 horas) após executar a ação, descomente a linha break
; caso contrário, a versão atual do script será executada por 5 horas (possivelmente mais, se a ação de 70 minutos começar às 4:59), possivelmente chamando a ação várias vezes.