In ksh, bashe zsh, timenon è un comando (incorporato o no), è una parola riservata nella lingua come foro 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> errorcomando 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-outputprima che venga usato il costrutto time (di nuovo, non command ) (qui al tempo cmd > output 2> error 3>&-).
Puoi anche eseguire quel timecostrutto 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 timeviene invocato il costrutto.
La maggior parte dei sistemi ha anche un timecomando. Puoi invocare quello disabilitando la timeparola 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 timee cmdverrà unito error-and-timing-output.
Inoltre, il timecomando, al contrario del timecostrutto, 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 bashha (quello che può essere considerato) un bug per cui time (cmd) 2> file(ma non time cmd | (cmd2) 2> fileper esempio) reindirizza l'output di temporizzazionefile
timesi tratti della parola chiave shell o/usr/bin/time. Potrebbero esserci diversi insiemi di descrittori coinvolti qui (la shell e quelli collegati a untimeprocesso). E non dimentichiamoci di quelli impliciti dalla()subshell. (in attesa di uno specialista di bash : p)