shell - ¿Cómo puedo redirigir el resultado del comando "tiempo"?
unix time (6)
La hora de comando envía su salida a STDERR (en lugar de STDOUT). Esto se debe a que el comando ejecutado con tiempo normalmente (en este caso ls) da salida a STDOUT.
Si desea capturar la salida del tiempo, escriba:
(time ls) 2> filename
Eso captura solo el tiempo de salida, pero la salida de l es normal para la consola. Si desea capturar ambos en un archivo, escriba:
(time ls) &> filename
2> redirige STDERR, y> redirige ambos.
Traté de redirigir el resultado del comando de tiempo, pero no pude:
$time ls > filename
real 0m0.000s
user 0m0.000s
sys 0m0.000s
En el archivo, puedo ver el resultado del comando ls
, no el del time
. Por favor explique, por qué no pude y cómo hacer esto.
La razón por la cual la redirección no parece funcionar con el time
es que es una palabra reservada bash (¡no es un built-in!) Cuando se usa frente a una tubería. bash (1):
Si la palabra reservada de tiempo precede a una interconexión, el tiempo transcurrido así como el tiempo del usuario y del sistema consumido por su ejecución se informan cuando finaliza la interconexión.
Entonces, para redirigir la salida del time
, use llaves:
{ time ls; } 2> filename
O llama /usr/bin/time
:
/usr/bin/time ls 2> filename
Si no desea mezclar la salida del time
y el comando. Con el tiempo de GNU, puede usar -o file
como:
/usr/bin/time -o tim grep -e k /tmp 1>out 2>err
mientras que tim
es salida de tiempo, out
y err
son stdout y stderr de grep
.
el tiempo es shell incorporado y no estoy seguro de si hay alguna forma de redirigirlo. Sin embargo, puede usar /usr/bin/time
lugar, lo que definitivamente acepta cualquier redirección de salida.
no es necesario lanzar sub shell. Usar un bloque de código también lo hará.
{ time ls; } 2> out.txt
o
{ time ls > /dev/null 2>&1 ; } 2> out.txt
puede redirigir la salida de tiempo usando,
(time ls) &> file
Porque necesita tomar (tiempo ls) como un solo comando para que pueda usar llaves.