bash history que armazena o tempo de execução?

2

É possível que seu histórico bash salve o tempo total de execução de todos os comandos executados?

i.e. como se cada comando fosse precedido de 'time' e o resultado fosse armazenado no histórico junto com o comando?

esclarecimento: eu já sei que você pode adicionar um timestamp de quando o comando foi iniciado - mas eu gostaria de saber o tempo total de execução , não apenas quando ele foi iniciado.

    
por slashdottir 05.12.2016 / 16:09

2 respostas

1

O uso do processo filho é definido em algum lugar dentro das chamadas do sistema wait3 ou wait4 por meio de um ponteiro struct rusage ( wait4(2) ). Em as fontes bash , encontramos:

$ egrep -r 'wait[34][[:blank:]]*\(' .
./jobs.c:   wait3 ((union wait *)statusp, options, (struct rusage *)0)
./jobs.c:   wait3 (statusp, options, (struct rusage *)0)
./jobs.c:   wait3 (statusp, options, (int *)0)
$

O espaço em branco (struct rusage *)0 indica que o uso do recurso não será retornado para bash . Uma pesquisa de struct rusage exibe a função time_command em execute_cmd.c , e isso parece coletar informações de uso por meio de getrusage(2) . No entanto, isso é para TIMEFORMAT do time builtin e não parece cruzar com o código do histórico. Sem remendar bash , acho que você teria que fazer algum tipo de ação envolvendo a execução de tudo em time e, em seguida, capturar o erro padrão em que as informações de horário aparecem em algum arquivo?

    
por 05.12.2016 / 18:49
0

Ao definir HISTTIMEFORMAT em seus scripts de inicialização, você terá um timestamp adicionado a cada linha do seu arquivo de histórico do bash. O valor dessa variável é a maneira como (*) os timestamps devem ser impressos na tela. Aqui está o meu:

HISTTIMEFORMAT='%F-%T '

(*) Veja man 3 strftime (se você não tem, man date deve fazer o truque)

    
por 05.12.2016 / 16:19