Estoy escribiendo un script en bash para calcular el tiempo transcurrido para la ejecución de mis comandos, considere:
STARTTIME=$(date +%s)
#command block that takes time to complete...
#........
ENDTIME=$(date +%s)
echo "It takes $($ENDTIME - $STARTTIME) seconds to complete this task..."
Supongo que mi lógica es correcta, sin embargo, termino con la siguiente impresión:
"Se necesitan unos segundos para completar esta tarea ..."
¿Hay algún problema con mi evaluación de cadenas?
Creo que las variables de bash no están tipificadas, me encantaría que, sin embargo, hubiera un método de "cadena a entero" en bash.

Me parece muy limpio usar la variable interna "$ SECONDS"
SECONDS=0 ; sleep 10 ; echo $SECONDSfuente
$SECONDSde hecho funciona para / bin / bash. No funciona para / bin / dash, el shell predeterminado en Debian y Ubuntu.sleep 0.5en arriba, el resultado es a veces 0, a veces 1 (al menos por Bash 5.0.3).Está intentando ejecutar el número en el
ENDTIMEcomo un comando. También debería ver un error como1370306857: command not found. En su lugar, use la expansión aritmética :También puede guardar los comandos en un script separado
commands.shy usar el comando time:fuente
Puede usar la
timepalabra clave de Bash aquí con una cadena de formato adecuadaEsto es lo que dice
TIMEFORMATla referencia :fuente
Para números más grandes, es posible que deseemos imprimir en un formato más legible. El siguiente ejemplo hace lo mismo que otros, pero también se imprime en formato "humano":
Prueba simple:
Salida:
Para usar en un script como se describe en otras publicaciones (capturar el punto de inicio y luego llamar a la función con la hora de finalización:
fuente
Prueba el siguiente código:
fuente
Esta es una alternativa de una sola línea a la función de Mike Q:
fuente
SECONDSla respuesta de Lon Kaut y tener en cuenta que $ / $ {} es innecesario en variables aritméticas hace que el código sea tan corto que incluso podría usarse en línea:echo "$((SECONDS/3600))h $(((SECONDS/60)%60))m $((SECONDS%60))s"intente usar el tiempo con la opción de segundos transcurridos:
/usr/bin/time -f%e sleep 1bajo bash.o
\time -f%e sleep 1en bash interactivo.ver la página del manual de tiempo:
y
fuente
/bin/timeno va a funcionar aquí: OP menciona un bloque . Entonces realmente necesitamos la palabra clavetimeaquí.fuente
fuente