Assumindo um shell como bash
ou ksh
:
max_time=3
SECONDS=0
IFS=$'\n:'
grep -v '^#' ref.txt |
while read tag cmd; do
if (( SECONDS < max_time )); then
echo "starting '$cmd' (tag is '$tag')"
sleep 2 # for simulation purposes
else
echo "did not have time to start '$cmd' (tag is '$tag')"
fi
done
Isso gerará a seguinte saída:
$ ksh script.sh
starting 'Process3' (tag is 'TEST')
starting 'process4' (tag is 'TEST')
did not have time to start 'process5' (tag is 'TEST')
O script seleciona todas as linhas do arquivo ref.txt
que não são comentadas e as divide em :
para separar a tag inicial do comando.
Se o script ainda não expirou, ele inicia o processo de leitura atual (simulado com uma chamada sleep
aqui).
Se ele tiver usado muito tempo, ele não iniciará mais processos, mas informará os que ainda não foram iniciados.
O tempo limite não ocorrerá de forma assíncrona, ou seja, o script não interromperá o início de um processo se mais de max_time
segundos tiver decorrido.
A variável SECONDS
contém o número de segundos desde que o shell foi iniciado ou, como neste caso, desde a última vez que foi definido como zero.