En ksh, bashy zsh, timeno es un comando (incorporado o no), es una palabra reservada en el idioma como forowhile .
Se usa para cronometrar una tubería 1 .
En:
time for i in 1 2; do cmd1 "$i"; done | cmd2 > redir
Tiene una sintaxis especial que le dice al shell que ejecute esa tubería:
for i in 1 2; do cmd1 "$i"; done | cmd2 > redir
E informe estadísticas de tiempo para ello.
En:
time cmd > output 2> error
Es lo mismo, estás temporización de lacmd > output 2> error comando y las estadísticas de cronometraje siguen en el stderr del shell.
Necesitas:
{ 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>&-
Para que se redireccione stderr del shell timing-outputantes de que se use la construcción de tiempo (nuevamente, no comando ) (aquí de vez en cuandocmd > output 2> error 3>&- ).
También puede ejecutar esa timeconstrucción en una subshell que tiene su stderr redirigido:
(time cmd > output 2> error) 2> timing-output
Pero esa subshell no es necesaria aquí, solo necesita que se redireccione stderr en el momento en que time se invoca la construcción.
La mayoría de los sistemas también tienen un timecomando. Puede invocarlo deshabilitando la timepalabra clave. Todo lo que necesita hacer es citar esa palabra clave de alguna manera, ya que las palabras clave solo se reconocen como tales cuando son literales.
'time' cmd > output 2> error-and-timing-output
Pero cuidado, el formato puede ser diferente y el más antiguo de ambos timey cmdse fusionará error-and-timing-output.
Además, el timecomando, a diferencia deltime construcción, no puede cronometrar tuberías o comandos compuestos o funciones o funciones integradas de shell ...
Si se tratara de un comando incorporado, podría ser capaz de cronometrar invocaciones de funciones o incorporados, pero no podría cronometrar redireccionamientos o canalizaciones o comandos compuestos.
1 Tenga en cuenta que bashtiene (lo que se puede considerar como) un error por el cual time (cmd) 2> file(pero no time cmd | (cmd2) 2> filepor ejemplo) redirige la salida de temporización afile
timees la palabra clave de shell o/usr/bin/time. Puede haber varios conjuntos de descriptores involucrados aquí (el shell y los adjuntos a untimeproceso). Y no nos olvidemos de los implicados por la()subshell. ( esperando un especialista en bash : p)