He comprobado esto , pero la solución proporcionada no funcionó para mí.
Usando la fecha puedo obtener el tiempo de ejecución en segundos:
T="$(date +%s)"
#some work here
T="$(($(date +%s)-T))"
echo "execution time (secs) ${T}"
Sin embargo, cuando intento esto:
T="$(date +%s%N)"
#some work here
T="$(($(date +%s%N)-T))"
Al agregar% N (como arriba) a la fecha para obtener la precisión de nanosegundos, aparece el siguiente error: -bash: 1369320760N: valor demasiado grande para la base (el token de error es "1369320760N")
¿Alguien sabe cómo medir el tiempo de ejecución en milisegundos usando bash en Mac OS X?
# some work here
omitido, obtengo tiempos de 0.2 a 0.3 segundos, lo que debería ser cero (o al menos constante) para alcanzar su objetivo. Mientras que/usr/bin/time usleep 50000
da un tiempo estable razonable de 0.05 +/- 0.01 seg. (Solo probado en Linux, no sé si / usr / bin / time y / o usleep están disponibles en OSX.)Respuestas:
Dado que OSX es un sistema BSD-ish, su biblioteca de strftime no tiene
%N
( http://www.freebsd.org/cgi/man.cgi?query=date )¿El
time
comando bash builtin te da la información que necesitas?fuente
Iría por esta ruta si necesitara milisegundos y BSD no admitiera la fecha
+%s%N
fuente
echo $(($(date +%s%N)/1000000))
Esto convertiría de nano-segundos a milisegundos.De @mpy,
date +%s.%N
funciona.Sin embargo, la salida es diferente entre Linux y OS X:
Linux:
1369322592.573787111
OS X:
1369322610.N
fuente
date +%s.%N
(pero no puedo verificar OSX; está funcionando en Linux). Pero el problema es quebash
, en$(( ))
mi humilde opinión, no puede manejar números de punto flotante.Si lo instala
coreutils
, puede usar GNU Linuxdate
escribiendogdate
.coreutils está disponible con Homebrew:
brew install coreutils
.fuente
Como se menciona en la otra respuesta, la fecha de OS X no admite% N (nanosegundos).
¿Podrías guardar los comandos a tiempo como un script? O use un subshell o grupo de comando para ellos:
O suma los tiempos de los comandos individuales:
O use un lenguaje de script:
%.3f
es un especificador de formato para un número de coma flotante con 3 puntos decimales. Time.now es un método de clase de la clase Time.fuente
ruby -e 'puts "%.3f" % Time.now'
,ruby
llama al intérprete de ruby,-e
ejecuta el script que sigue en la línea de comando.puts
es rubyprintf
(más o menos),Time
es un objeto ruby yTime.now
son los segundos desde la época. El uso%.3f
recorta la salida a 3 decimales, que es milisegundos (las partes ".046" y ".943" de la salida.)time
es una herramienta de línea de comandos que mide el tiempo que se tarda en ejecutar el comando que sigue. Verman time
para más detalles.Glenn tiene razón,
time
es el comando que está buscando, pero para analizar la información que desea, deberá pasarla a algún otro procesador comosed
.time command-goes-here >/dev/null 2>$1|sed rules-go-here
Este comando eliminará la salida del comando en sí mismo (enviando salidas estándar y de error a / dev / null), y pasará los resultados de tiempo a sed, donde deberá elegir las reglas apropiadas para editar la secuencia y la salida El valor deseado.
fuente