2009-07-24 13 views
9

Często zdarza mi się zapomnieć o jawnym przedrostku egzekucji za pomocą komendy "time", najlepiej gdybym zobaczył w następnym wierszu polecenia, ile czasu rzeczywistego wykonała ostatnia komenda (przy każdym poleceniu).Automatyczne ustawianie czasu każdego wykonanego polecenia i wyświetlanie w wierszu polecenia Bash?

Już przejrzałem dokumentację bash, ale nie mogłem znaleźć niczego powiązanego.

+3

To jest dobre pytanie dla Stackexchange Unix/Linux. – Flimm

Odpowiedz

9

Można to zrobić:

$ bind '"\C-j": "\C-atime \C-m"' 

Albo umieścić to w swoim ~/.inputrc:

"\C-j": "\C-atime \C-m" 

Potem, gdy chcesz zrobić time sleep 1 chcesz wpisać sleep 1 i nacisnąć Ctrl + J zamiast Wpisz.

Nie polecam zamiany j i m w komendzie bind (lub w pliku .inputrc). Za każdym razem, gdy naciskasz Wprowadź, otrzymasz time dodane, co może być dość irytujące i spowoduje błędy podczas wpisywania polecenia wielowierszowego.

Można dodać go do ~/.bashrc aby wyjście time bardziej zwartej:

export TIMEFORMAT='r: %R, u: %U, s: %S' 

(podobna do mojej odpowiedzi here.)

+0

+1 ciekawa sztuczka. – neuro

+1

Świetnie, dziękuję! (przepraszam, że odpowiedź trwała tak długo) – mark

6

Another stackoverflow thread obejmuje zasadniczo to samo pytanie. Moja odpowiedź w tym wątku można podsumować jako:

trap 'SECONDS=0' DEBUG 
export PS1='your_normal_prompt_here ($SECONDS) # ' 

..., aby wyświetlić liczbę sekund w postaci liczby całkowitej, czyli

seconds2days() { # convert integer seconds to Ddays,HH:MM:SS 
    printf "%ddays,%02d:%02d:%02d" $(((($1/60)/60)/24)) \ 
    $(((($1/60)/60)%24)) $((($1/60)%60)) $(($1%60)) | 
    sed 's/^1days/1day/;s/^0days,\(00:\)*//;s/^0//' ; } 
trap 'SECONDS=0' DEBUG 
PS1='other_prompt_stuff_here ($(seconds2days $SECONDS)) # ' 

..for „Ddays, GG: MM: SS "z usuniętymi wiodącymi pustymi wartościami.

Powiązane problemy