Como posso calcular automaticamente os comandos no bash?

13

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 em bash ?

    
por Eyal 24.10.2012 / 23:33

1 resposta

13

Eu não acho que você possa conseguir exatamente o mesmo efeito sem modificar a fonte do bash. Mas você pode se aproximar, esperançosamente, perto o suficiente para você.

Você pode combinar hacky do bash Ganho de pré-comando e a variável SECONDS para mostrar a hora do relógio de parede de uma maneira não intrusiva. Aqui está uma implementação simples devido a Ville Laurikari . As funções timer_start e timer_stop sã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 informações completas de time para cada comando, veja uma maneira de Dennis Williamson :

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

Quando você pressionar Ctrl + J ao invés de Enter para iniciar um comando, você obterá informações de tempo. Rebinding Enter (isto é, Ctrl + M ) não é recomendado porque o comando modificado algumas vezes estará sintaticamente incorreto.

Veja Como pode o tempo de parede do último comando será colocado no prompt Bash? e Cronometrando automaticamente cada comando executado e mostrado no prompt do Bash? no estouro de pilha para outros métodos (note que a maioria só dá o tempo real decorrido, não o tempo da CPU).

    
por Gilles 25.10.2012 / 00:38