Jak mogę automatycznie mierzyć czas poleceń w bash?

14

W tcshjest zmienna 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.

Jak mam to zrobić bash?

Eyal
źródło

Odpowiedzi:

14

Nie sądzę, że można osiągnąć dokładnie ten sam efekt bez modyfikacji źródła bash. Ale możesz się zbliżyć, mam nadzieję, że wystarczająco blisko ciebie.

Możesz połączyć haczykowaty haczyk bash ze SECONDSzmienną, aby wyświetlać czas zegara ściennego w nieinwazyjny sposób. Oto prosta implementacja dzięki Ville Laurikari . Funkcje timer_starti timer_stopsą wykonywane bezpośrednio przed uruchomieniem polecenia i bezpośrednio przed wyświetleniem następnego monitu.

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

Aby uzyskać pełne timeinformacje o każdym poleceniu, oto sposób, dzięki Dennisowi Williamsonowi :

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

Gdy naciśniesz Ctrl+ Jzamiast, Enteraby uruchomić polecenie, otrzymasz informacje o czasie. Ponowne wiązanie Enter(tj. Ctrl+ M) Nie jest zalecane, ponieważ zmodyfikowane polecenie jest czasami niepoprawne pod względem składniowym.

Zobacz Jak można ustawić czas ostatniej komendy na ścianie w wierszu polecenia Bash? i automatycznie mierzy czas każdego wykonanego polecenia i pokazu w monicie Bash? w przypadku przepełnienia stosu dla innych metod (należy jednak pamiętać, że większość z nich podaje tylko upływ czasu rzeczywistego, a nie procesora).

Gilles „SO- przestań być zły”
źródło