Este mostra o momento em que é feito:
#! /bin/bash
START_TIME=$(date +%s)
echo -n Finding mp3 files
sleep 3 # some time consuming command
echo .\ Elapsed time: $(( $(date +%s)-START_TIME ))
Ele responderá:
Finding mp3 files
e depois
Finding mp3 files. Elapsed time: 3
Se você quiser ver o tempo contando enquanto espera, o comando demorado não deve ecoar nada (é claro).
#! /bin/bash
START_TIME=$( date +%s )
echo Finding mp3 files
sleep 3 & # some time consuming command
while [[ -d /proc/$! ]]; do
echo -en \rElapsed time: $(( $(date +%s)-START_TIME ))
sleep 0.1
done
echo .
Explicação: Quando o comando entra em segundo plano com &
, ele deixa o número de identificação do processo em $!
. Esse processo é representado por um diretório (virtual) em /proc/$!
. Enquanto esse diretório existir, o comando está em execução e estamos contando o tempo.
Terceiro exemplo; mais parecido com a pergunta. Substitua sleep 3
pelo comando demorado.
#! /bin/bash
echo "Starting NodeManager..."
START_TIME=$(date +%s)
nohup sleep 3 &
while ps -p $! > /dev/null ; do
SECONDS=$(( $(date +%s)-START_TIME ))
printf "\r\e[1;96mElapsed Time: %02dm:%02ds\e[0m" $(($SECONDS%3600/60)) $(($SECONDS%60))
done
Echo
Editar: o terceiro exemplo agora mostra o caminho certo para testar um processo ainda está em execução. (mas tem que lançar um processo ps
e assim é mais lento - a sua escolha)