
Puede que sea una pregunta de novato, pero no entiendo cómo se configura esto y por qué el formato de salida del time
comando es diferente en estos dos casos:
si se usa vía time
, la salida son tres filas con información básica
$ time sleep 1
real 0m1.003s
user 0m0.000s
sys 0m0.000s
entonces puedo comprobar qué binario se utiliza
$ which time
/usr/bin/time
y llámelo directamente para obtener resultados en un formato completamente diferente, con mucha más información.
$ /usr/bin/time sleep 1
0.00user 0.00system 0:01.00elapsed 0%CPU (0avgtext+0avgdata 2000maxresident)k
0inputs+0outputs (0major+77minor)pagefaults 0swaps
no hay alias relacionados contime
$ alias | grep time
$
Estoy corriendo Ubuntu 16.04
.
Respuesta1
La primera es la bash
palabra clave incorporada time
(compilada con bash
) y la segunda es el ejecutable externo time
( /usr/bin/time
viene con el time
paquete).
Además, which
no se pueden mostrar los comandos o palabras clave integrados del shell, ya que solo busca PATH
, debe usarlos type
para eso. Al ser un shell incorporado en sí mismo, type
también puede verificar las entidades internas del shell (y también PATH
), para que pueda detectar la diferencia de la siguiente manera:
type -a time
Aquí:
$ type -a time
time is a shell keyword
time is /usr/bin/time
El primero se ejecutará si solo usas time
. También puedes obtener cuál se está ejecutando simplemente usando type
(sin -a
):
type time
Le -a
indica type
que busque en las entidades internas de Shell y también, PATH
es decir, que busque en todas las fuentes posibles.
Si por alguna razón necesitas el externo, usa cualquiera de:
\time
"time"
'time'
command time
Respuesta2
Otra diferencia entre las utilidades integradas y externas es que las utilidades integradas de Bashtime
¿El tiempo completará las tuberías?o llamadas a funciones de Shell (aparentemente incluso bucles, pero el manual no parece prometer eso). El externo time
no puede, ya que al estar fuera del shell, no conoce el código circundante.
bash$ time echo blah | sleep 3
real 0m3.002s
...
bash$ /usr/bin/time echo blah | sleep 3
0.00user 0.00system 0:00.00elapsed ?%CPU
...
bash$ time for x in 1 2 3 ; do sleep 1 ; done
real 0m3.006s
...
mientras el tiempo esespecificadoen el estándar, no se especifica cómo debe actuar en una tubería, por lo que es posible una implementación interna más poderosa como esta.