Comment puis-je chronométrer automatiquement les commandes dans bash?

14

Dans tcsh, il y a 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.

Comment dois-je procéder bash?

Eyal
la source

Réponses:

14

Je ne pense pas que vous puissiez obtenir exactement le même effet sans modifier la source bash. Mais vous pouvez vous rapprocher, espérons-le suffisamment pour vous.

Vous pouvez combiner le crochet de précommande hacky de bash et la SECONDSvariable pour afficher l'heure de l'horloge murale de manière non intrusive. Voici une implémentation simple grâce à Ville Laurikari . Les fonctions timer_startet timer_stopsont exécutées immédiatement avant de lancer une commande et immédiatement avant d'afficher l'invite suivante.

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

Pour obtenir les timeinformations complètes pour chaque commande, voici un moyen dû à Dennis Williamson :

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

Lorsque vous appuyez sur Ctrl+ Jau lieu de Enterpour démarrer une commande, vous obtenez des informations sur l'heure. Une nouvelle liaison Enter(c'est-à-dire Ctrl+ M) n'est pas recommandée car la commande modifiée sera parfois syntaxiquement incorrecte.

Voir Comment l'heure du mur de la dernière commande peut-elle être mise dans l'invite Bash? et chronométrer automatiquement chaque commande exécutée et l'afficher dans l'invite Bash? sur Stack Overflow pour d'autres méthodes (notez cependant que la plupart ne donnent que le temps réel écoulé, pas le temps CPU).

Gilles 'SO- arrête d'être méchant'
la source