¿Es posible imprimir el tiempo de ejecución de un comando de shell con la siguiente combinación?
root@hostname:~# "command to execute" && echo "execution time"
Respuestas:
No olvide que hay una diferencia entre el builtin de bash time(que debería llamarse por defecto cuando lo hace time command) y /usr/bin/time(que debería requerir que lo llame por su ruta completa).
La función incorporada timesiempre se imprime en stderr, pero /usr/bin/timele permitirá enviar la salida de tiempo a un archivo específico, para que no interfiera con el flujo stderr del comando ejecutado. Además, /usr/bin/timeel formato de 'se puede configurar en la línea de comandos o mediante la variable de entorno TIME, mientras que el timeformato integrado de bash solo se configura mediante la TIMEFORMATvariable de entorno.
$ time factor 1234567889234567891 # builtin
1234567889234567891: 142662263 8653780357
real 0m3.194s
user 0m1.596s
sys 0m0.004s
$ /usr/bin/time factor 1234567889234567891
1234567889234567891: 142662263 8653780357
1.54user 0.00system 0:02.69elapsed 57%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (0major+215minor)pagefaults 0swaps
$ /usr/bin/time -o timed factor 1234567889234567891 # log to file `timed`
1234567889234567891: 142662263 8653780357
$ cat timed
1.56user 0.02system 0:02.49elapsed 63%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (0major+217minor)pagefaults 0swaps
help timeporque solo lo miré y pensé que era un argumento de línea de comando. Actualizaré la respuesta.
time es un comando integrado en la mayoría de los shells que escribe información sobre el tiempo de ejecución en el tty.
También puedes probar algo como
start_time=`date +%s`
<command-to-execute>
end_time=`date +%s`
echo execution time was `expr $end_time - $start_time` s.
O en bash:
start_time=`date +%s`
<command-to-execute> && echo run time is $(expr `date +%s` - $start_time) s
timeusa milisegundos. Y si desea cronometrar un puñado de comandos juntos sin tener que usar variables y cálculos, puede usar paréntesis: time ( command1 ; command2 ; command3 )incluso puede cronometrarlos individualmente junto con un tiempo total, así: time ( time command1 ; time command2 ; time command3 ) Por supuesto, si desea unos veinte comandos, podría Sería mejor usar la solución de esta respuesta. Pero luego, debería comenzar a pensar en poner todos sus comandos en un script ...
root@hostname:~# time [command]
También distingue entre el tiempo real utilizado y el tiempo del sistema utilizado.
timeescribe en tty, no stderr. Lo que supongo que empeora las cosas.
Para una medición delta línea por línea, pruebe gnonom .
Es una utilidad de línea de comandos, un poco como ts de moreutils, para anteponer la información de la marca de tiempo a la salida estándar de otro comando. Útil para procesos de larga ejecución en los que le gustaría tener un registro histórico de lo que está tardando tanto.
La canalización de cualquier cosa a gnomon antepondrá una marca de tiempo a cada línea, indicando cuánto tiempo fue esa línea la última línea en el búfer, es decir, cuánto tiempo tardó en aparecer la siguiente línea. Por defecto, gnomon mostrará los segundos transcurridos entre cada línea, pero eso es configurable.
Si estoy iniciando un proceso de larga duración como una copia o un hash y quiero saber más tarde cuánto tiempo tomó, simplemente hago esto:
$ date; sha1sum reallybigfile.txt; date
Lo que dará como resultado la siguiente salida:
Tue Jun 2 21:16:03 PDT 2015
5089a8e475cc41b2672982f690e5221469390bc0 reallybigfile.txt
Tue Jun 2 21:33:54 PDT 2015
Por supuesto, tal como se implementa aquí, no es muy preciso y no calcula el tiempo transcurrido. Pero es muy simple y, a veces, todo lo que necesitas.
En zsh puedes usar
=time ...
En bash o zsh puedes usar
command time ...
Estos (por diferentes mecanismos) obligan a utilizar un comando externo.
Sólo ps -o etime= -p "<your_process_pid>"
man bash: "La variable TIMEFORMAT puede establecerse en una cadena de formato que especifica cómo se debe mostrar la información de tiempo"