Como cronometrar automaticamente os comandos no bash?


14

Em tcsh, há a variável time:

   The time shell variable can be set to execute the time builtin command
   after the completion of any process that takes more than a given number
   of CPU seconds.

Como faço isso bash?

Respostas:


14

Eu não acho que você pode conseguir exatamente o mesmo efeito sem modificar a fonte do bash. Mas você pode chegar perto, espero que esteja perto o suficiente para você.

Você pode combinar o gancho de pré-comando hacky do bash e a SECONDSvariável para mostrar a hora do relógio de parede de maneira não intrusiva. Aqui está uma implementação simples devido ao Ville Laurikari . As funções timer_starte timer_stopsão executadas imediatamente antes de iniciar um comando e imediatamente antes de exibir o próximo prompt.

function timer_start {
  timer=${timer:-$SECONDS}
}
function timer_stop {
  timer_show=$(($SECONDS - $timer))
  unset timer
}
trap 'timer_start' DEBUG
PROMPT_COMMAND=timer_stop
PS1='[last: ${timer_show}s][\w]$ '

Para obter as timeinformações completas de cada comando, eis uma maneira de Dennis Williamson :

bind '"\C-j": "\C-atime {\C-e;}\C-m"'

Quando você pressiona Ctrl+ em Jvez de Enteriniciar um comando, você obtém informações de tempo. A religação Enter(ou seja, Ctrl+ M) não é recomendada porque o comando modificado às vezes estará sintaticamente incorreto.

Consulte Como o tempo de parede do último comando pode ser colocado no prompt do Bash? e Cronometrando automaticamente todos os comandos executados e exibidos no prompt do Bash? no Stack Overflow para outros métodos (observe, porém, que a maioria fornece apenas o tempo real decorrido, não o tempo da CPU).

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.