¿Cómo puedo cronometrar automáticamente los comandos en bash?


14

En tcsh, está la variable 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.

¿Cómo hago esto bash?

Respuestas:


14

No creo que pueda lograr exactamente el mismo efecto sin modificar la fuente bash. Pero puedes acercarte, ojalá lo suficientemente cerca para ti.

Puede combinar el gancho de precomando hacky de bash y la SECONDSvariable para mostrar la hora del reloj de pared de una manera no intrusiva. Aquí hay una implementación simple debido a Ville Laurikari . Las funciones timer_starty timer_stopse ejecutan inmediatamente antes de iniciar un comando e inmediatamente antes de mostrar el siguiente mensaje.

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 obtener la timeinformación completa de cada comando, he aquí una forma debido a Dennis Williamson :

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

Cuando presiona Ctrl+ en Jlugar de Enteriniciar un comando, obtendrá información de tiempo. No se recomienda volver a vincular Enter(es decir, Ctrl+ M) porque el comando modificado a veces será sintácticamente incorrecto.

Consulte ¿Cómo se puede poner el tiempo de la pared del último comando en la solicitud Bash? y cronometrando automáticamente cada comando ejecutado y mostrar en la solicitud de Bash? en Stack Overflow para otros métodos (tenga en cuenta que la mayoría solo proporciona el tiempo real transcurrido, no el tiempo de CPU).

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.