Você pode gravar a hora em que uma linha de comando é iniciada e a hora em que um prompt é exibido. O Bash já acompanha a data de início de cada linha de comando em seu histórico e você pode observar a hora em que exibe o próximo prompt.
print_command_wall_clock_time () {
echo Wall clock time: \
$(($(date +%s) - $(HISTTIMEFORMAT="%s ";
set -o noglob;
set $(history 1); echo $2)))
}
PROMPT_COMMAND=print_command_wall_clock_time$'\n'"$PROMPT_COMMAND"
Isso só lhe dá a segunda resolução e apenas a hora do relógio de parede. Se você quiser uma melhor resolução, precisará usar um comando date
externo que suporte o formato %N
para nanossegundos e a captura DEBUG
para chamar date
antes de executar o comando para a hora.
call_date_before_command () {
date_before=$(date +%s.%N)
}
print_wall_clock_time () {
echo Wall clock time: \
$((date +"$date_before - %s.%N" | bc))
}
trap call_date_before_command DEBUG
PROMPT_COMMAND=print_command_wall_clock_time
Mesmo com a armadilha DEBUG
, não acho que exista uma maneira de exibir automaticamente os tempos do processador para cada comando ou ser mais exigente que o prompt.
Se você estiver disposto a usar um shell diferente, veja como obter um relatório de tempo para cada comando no zsh (isso não é generalizado para outras tarefas):
REPORTTIME=0
Você pode definir REPORTTIME
para qualquer valor inteiro, a informação de tempo será exibida apenas para comandos que usaram mais do que esses muitos segundos de tempo do processador.
Zsh usou este recurso do csh, onde a variável é chamada time
.