Wie kann ich Befehle in der Bash automatisch zeitlich festlegen?

14

In tcshgibt es die 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.

Wie mache ich das in bash?

Eyal
quelle

Antworten:

14

Ich denke nicht, dass Sie genau den gleichen Effekt erzielen können, ohne die Bash-Quelle zu modifizieren. Aber du kannst nah kommen, hoffentlich nah genug für dich.

Sie können den Hacky Precommand Hook von bash und die SECONDSVariable kombinieren, um die Uhrzeit der Wanduhr auf nicht aufdringliche Weise anzuzeigen . Hier ist eine einfache Implementierung von Ville Laurikari . Die Funktionen timer_startund timer_stopwerden unmittelbar vor dem Starten eines Befehls und unmittelbar vor dem Anzeigen der nächsten Eingabeaufforderung ausgeführt.

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

Um die vollständigen timeInformationen für jeden Befehl zu erhalten, gibt es für Dennis Williamson einen Weg :

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

Wenn Sie Ctrl+ drücken, Janstatt Entereinen Befehl zu starten, erhalten Sie Zeitinformationen. Ein erneutes Binden Enter(dh Ctrl+ M) wird nicht empfohlen, da der geänderte Befehl manchmal syntaktisch falsch ist.

Siehe Wie kann die Wandzeit des letzten Befehls in die Bash-Eingabeaufforderung eingefügt werden? und Automatisches Timing jedes ausgeführten Befehls und Anzeige in der Bash-Eingabeaufforderung? on Stack Overflow für andere Methoden (beachten Sie jedoch, dass die meisten nur die verstrichene Echtzeit angeben, nicht die CPU-Zeit).

Gilles 'SO - hör auf böse zu sein'
quelle