Pregunta:
Para saber cuánto tiempo toman ciertas operaciones dentro de un script de Bash (v4 +), me gustaría analizar la salida del comando de time
"por separado" y (en última instancia) capturarlo dentro de una variable de Bash ( let VARNAME=...
) .
Ahora, estoy usando time -f '%e' ...
(o más bien command time -f '%e' ...
debido al Bash incorporado), pero como ya redirigí la salida del comando ejecutado Estoy realmente perdido en cuanto a cómo haría para capturar la salida del comando de time
. Básicamente, el problema aquí es separar la salida de time
de la salida de los comandos ejecutados.
Lo que quiero es la funcionalidad de contar la cantidad de tiempo en segundos (enteros) entre el inicio de un comando y su finalización. No tiene que ser el comando de time
o el respectivo incorporado.
Editar: dadas las dos respuestas útiles a continuación, quería agregar dos aclaraciones.
- No quiero tirar la salida del comando ejecutado, pero realmente no importará si termina en stdout o stderr.
- Preferiría un enfoque directo sobre uno indirecto (es decir, capturar la salida directamente en lugar de almacenarla en archivos intermedios).
La solución que usa la date
hasta ahora se acerca a lo que quiero.
Respuesta:
Para obtener la salida de time
en una var, use lo siguiente:
usr@srv $ mytime="$(time ( ls ) 2>&1 1>/dev/null )"
usr@srv $ echo "$mytime"
real 0m0.006s
user 0m0.001s
sys 0m0.005s
También puede solicitar un solo tipo de hora, por ejemplo, utime:
usr@srv $ utime="$( TIMEFORMAT='%lU';time ( ls ) 2>&1 1>/dev/null )"
usr@srv $ echo "$utime"
0m0.000s
Para obtener la hora, también puede usar date +%s.%N
, así que tómelo antes y después de la ejecución y calcule la diferencia:
START=$(date +%s.%N)
command
END=$(date +%s.%N)
DIFF=$(echo "$END - $START" | bc)
# echo $DIFF