In ksh
, bash
e zsh
, time
non è un comando (incorporato o no), è una parola riservata nella lingua come for
o while
.
È usato per cronometrare una pipeline 1 .
Nel:
time for i in 1 2; do cmd1 "$i"; done | cmd2 > redir
Hai una sintassi speciale che dice alla shell di eseguire quella linea di pipe:
for i in 1 2; do cmd1 "$i"; done | cmd2 > redir
E segnala le statistiche di temporizzazione per questo.
Nel:
time cmd > output 2> error
E 'lo stesso, si sta temporizzazione il cmd > output 2> error
comando e le statistiche di temporizzazione ancora andare avanti stderr della shell.
Hai bisogno:
{ time cmd > output 2> error; } 2> timing-output
O:
exec 3>&2 2> timing-output
time cmd > output 2> error 3>&-
exec 2>&3 3>&-
Per reindirizzare lo stderr della shell timing-output
prima che venga usato il costrutto time (di nuovo, non command ) (qui al tempo cmd > output 2> error 3>&-
).
Puoi anche eseguire quel time
costrutto in una subshell che ha il suo reindirizzamento standard:
(time cmd > output 2> error) 2> timing-output
Ma quella subshell non è necessaria qui, devi solo reindirizzare stderr nel momento in cui time
viene invocato il costrutto.
La maggior parte dei sistemi ha anche un time
comando. Puoi invocare quello disabilitando la time
parola chiave. Tutto quello che devi fare è citare quella parola chiave in qualche modo poiché le parole chiave sono riconosciute come tali solo se letterali.
'time' cmd > output 2> error-and-timing-output
Ma attenzione, il formato può essere diverso e lo standard di entrambi time
e cmd
verrà unito error-and-timing-output
.
Inoltre, il time
comando, al contrario del time
costrutto, non può cronometrare pipeline o comandi composti o funzioni o builtin della shell ...
Se fosse un comando incorporato, potrebbe essere in grado di eseguire il cronometraggio di invocazioni di funzioni o builtin, ma non potrebbe cronometrare reindirizzamenti o pipeline o comandi composti.
1 Nota che bash
ha (quello che può essere considerato) un bug per cui time (cmd) 2> file
(ma non time cmd | (cmd2) 2> file
per esempio) reindirizza l'output di temporizzazionefile
time
si tratti della parola chiave shell o/usr/bin/time
. Potrebbero esserci diversi insiemi di descrittori coinvolti qui (la shell e quelli collegati a untime
processo). E non dimentichiamoci di quelli impliciti dalla()
subshell. (in attesa di uno specialista di bash : p)