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 hereomitido, 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 50000da 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
timecomando 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%Nfuente
echo $(($(date +%s%N)/1000000))Esto convertiría de nano-segundos a milisegundos.De @mpy,
date +%s.%Nfunciona.Sin embargo, la salida es diferente entre Linux y OS X:
Linux:
1369322592.573787111OS X:
1369322610.Nfuente
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 Linuxdateescribiendogdate.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:
%.3fes 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',rubyllama al intérprete de ruby,-eejecuta el script que sigue en la línea de comando.putses rubyprintf(más o menos),Timees un objeto ruby yTime.nowson los segundos desde la época. El uso%.3frecorta la salida a 3 decimales, que es milisegundos (las partes ".046" y ".943" de la salida.)timees una herramienta de línea de comandos que mide el tiempo que se tarda en ejecutar el comando que sigue. Verman timepara más detalles.Glenn tiene razón,
timees 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-hereEste 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