Solo una pequeña pregunta sobre los programas de temporización en Linux: el comando time permite medir el tiempo de ejecución de un programa:
[ed@lbox200 ~]$ time sleep 1
real 0m1.004s
user 0m0.000s
sys 0m0.004s
Que funciona bien. Pero si trato de redirigir la salida a un archivo, falla.
[ed@lbox200 ~]$ time sleep 1 > time.txt
real 0m1.004s
user 0m0.001s
sys 0m0.004s
[ed@lbox200 ~]$ cat time.txt
[ed@lbox200 ~]$
Sé que hay otras implementaciones de tiempo con la opción -o para escribir un archivo, pero mi pregunta es sobre el comando sin esas opciones.
Alguna sugerencia ?
Respuestas:
Tratar
que combina el STDERR de "tiempo" y su comando en time.txt
O usar
que pone STDERR de "sleep" en el archivo "sleep.stderr" y solo STDERR de "time" entra en "time.txt"
fuente
time
evalúa.{ time sleep 1; } 2>&1 | grep real
. Esto envía stderr a stdout que grep puede leer.Envolver
time
y el comando que está sincronizando en un conjunto de paréntesis.Por ejemplo, los siguientes tiempos
ls
y escribe el resultadols
y los resultados del tiempo enoutfile
:O, si desea separar la salida del comando de la salida capturada de
time
:fuente
Sencillo. La
time
utilidad GNU tiene una opción para eso.Pero debe asegurarse de no estar utilizando el
time
comando incorporado de su shell , ¡al menos elbash
incorporado no proporciona esa opción! Es por eso que necesita dar la ruta completa de latime
utilidad:fuente
Si le preocupa la salida de error del comando, puede separarlos de esta manera mientras sigue usando el comando de tiempo incorporado.
o
Como ve, los errores del comando van a un archivo (ya que
stderr
se usa paratime
).Desafortunadamente, no puede enviarlo a otro identificador (como
3>&2
) ya que eso ya no existirá fuera del{...}
Dicho esto, si puedes usar el tiempo GNU, solo haz lo que @Tim Ludwinski dijo.
fuente
Dado que la salida del comando 'tiempo' es salida de error, rediríjalo ya que la salida estándar sería más intuitiva para realizar un procesamiento adicional.
fuente
Si está utilizando el tiempo GNU en lugar del bash incorporado, intente
(Nota: el formato de tiempo GNU es un poco diferente al bash incorporado).
fuente
\time -o outfile command
(con ``) para usar GNU en lugar de incorporado.en tu caso
luego
fuente
time
binario real instalado,out
contendrá algo comobash: time: command not found
.Terminé usando:
fuente
Esto tiene el beneficio de no generar subcapas, y la tubería final tiene su stderr restaurado al stderr real.
fuente
Si no desea tocar el proceso original 'stdout y stderr, puede redirigir stderr al descriptor de archivo 3 y viceversa:
Puede usar eso para un contenedor (por ejemplo, para cronjobs) para monitorear tiempos de ejecución:
fuente
Si está usando
csh
, puede usar:Por ejemplo:
fuente