W ksh
, bash
a zsh
, time
nie jest poleceniem (wbudowane lub nie), to słowo zarezerwowane w języku podobnego for
lub while
.
Służy do pomiaru czasu potoku 1 .
W:
time for i in 1 2; do cmd1 "$i"; done | cmd2 > redir
Masz specjalną składnię, która każe powłoce uruchomić tę linię potoku:
for i in 1 2; do cmd1 "$i"; done | cmd2 > redir
I zgłoś dla niego statystyki czasowe.
W:
time cmd > output 2> error
To ten sam, jesteś rozrządu na cmd > output 2> error
komendę, a statystyki czasowe nadal iść na stderr przez powłokę.
Potrzebujesz:
{ time cmd > output 2> error; } 2> timing-output
Lub:
exec 3>&2 2> timing-output
time cmd > output 2> error 3>&-
exec 2>&3 3>&-
Aby stderr powłoki został przekierowany, timing-output
zanim zostanie użyta konstrukcja czasu (ponownie, nie polecenie ) (tutaj do czasu cmd > output 2> error 3>&-
).
Możesz także uruchomić tę time
konstrukcję w podpowłoce , której przekierowanie stderr:
(time cmd > output 2> error) 2> timing-output
Ale ta podpowłoka nie jest tutaj potrzebna, wystarczy stderr, aby zostać przekierowanym w momencie time
wywołania konstrukcji.
Większość systemów ma także time
polecenia. Możesz je wywołać, wyłączając time
słowo kluczowe. Wszystko, co musisz zrobić, to jakoś zacytować to słowo kluczowe, ponieważ słowa kluczowe są rozpoznawane jako takie tylko w dosłownym znaczeniu.
'time' cmd > output 2> error-and-timing-output
Ale uwaga, format może być inny, a stderr obu time
i cmd
zostanie połączony error-and-timing-output
.
Ponadto time
polecenie, w przeciwieństwie do time
konstrukcji, nie może mierzyć czasu potoków lub poleceń złożonych, funkcji lub wbudowanych powłok ...
Gdyby było to polecenie wbudowane, mogłoby ono być w stanie określić czas wywołań funkcji lub poleceń wbudowanych, ale nie byłoby w stanie określić czasu przekierowań, potoków ani poleceń złożonych.
1 Zauważ, że bash
ma (co można uznać za) błąd, przez który time (cmd) 2> file
(ale nie time cmd | (cmd2) 2> file
na przykład) przekierowuje wyjście taktowania dofile
time
jest słowem kluczowym powłoki, czy/usr/bin/time
. Może być tu zaangażowanych kilka zestawów deskryptorów (powłoki i tych dołączonych dotime
procesu). I nie zapominajmy o tych sugerowanych przez()
podpowłokę. ( czekając na specjalistę od bash : p)