Come posso cronometrare automaticamente i comandi in bash?


14

In tcsh, c'è la variabile 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.

Come faccio a farlo bash?

Risposte:


14

Non penso che tu possa ottenere esattamente lo stesso effetto senza modificare la fonte bash. Ma puoi avvicinarti, si spera abbastanza vicino per te.

È possibile combinare il gancio di precomando hacky di bash e la SECONDSvariabile per mostrare l'ora dell'orologio da parete in modo non intrusivo. Ecco una semplice implementazione dovuta a Ville Laurikari . Le funzioni timer_starte timer_stopvengono eseguite immediatamente prima di avviare un comando e immediatamente prima di visualizzare il prompt successivo.

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]$ '

Per ottenere le timeinformazioni complete per ogni comando, ecco un modo dovuto a Dennis Williamson :

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

Quando premi Ctrl+ Jinvece di Enteravviare un comando, otterrai informazioni sul tempo. Si consiglia di non ricollegare Enter(ovvero Ctrl+ M) perché il comando modificato talvolta è sintatticamente errato.

Vedi Come si può inserire l'ora del muro dell'ultimo comando nel prompt di Bash? e Cronometrare automaticamente ogni comando eseguito e mostrare nel prompt di Bash? su Stack Overflow per altri metodi (notare tuttavia che la maggior parte fornisce solo il tempo reale trascorso, non il tempo della CPU).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.