bash – Cómo medir el tiempo de ejecución del programa y almacenarlo dentro de una variable

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.

  1. No quiero tirar la salida del comando ejecutado, pero realmente no importará si termina en stdout o stderr.
  2. 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

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım