Puede ser una pregunta para novatos, pero no entiendo cómo está configurado y por qué el formato de salida del time
comando es diferente en estos dos casos:
si se usa vía time
, la salida es de tres filas con información básica
$ time sleep 1
real 0m1.003s
user 0m0.000s
sys 0m0.000s
entonces puedo ver qué binario se usa
$ which time
/usr/bin/time
y llamarlo 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 con time
$ alias | grep time
$
Estoy corriendo Ubuntu 16.04
.
which
es básicamente inútil ...Respuestas:
La primera es la
bash
propia palabra clave incorporadatime
(compilada conbash
), y la segunda es el ejecutable externotime
(/usr/bin/time
viene con eltime
paquete).Además,
which
no puede mostrar los comandos incorporados del shell o las palabras clave, ya que solo buscaPATH
, debe usartype
para eso. Al ser un constructor de shell en sí mismo, tambiéntype
puede verificar las entidades internas de shell (y tambiénPATH
), para que pueda detectar la diferencia al:Aquí:
El primero se ejecutará si solo lo usa
time
. También puede obtener cuál se está ejecutando simplemente usandotype
(sin-a
):Le
-a
dicetype
que busque en las entidades internas de la shell y también,PATH
es decir, busque en todas las fuentes posibles.Si por alguna razón necesita el externo, use cualquiera de:
fuente
which
no considera las incorporaciones? Y siempre debería consultartype -a
primero. En realidad, parece quetype
es superior a lawhich
ya que da salida a la ubicación/usr/bin/time
, asíwhich
sirve entonces?type
es de hecho superior --- si estás usando bash. Es posible que otro caparazón no tenga ni latype
bulitina ni la acumulacióntime
.time
ser externo solamente, pero notype
,type
está disponible en todas las conchas compatibles con POSIX.Otra diferencia entre las utilidades incorporadas y las externas es que la
time
construcción integrada de Bash cronometrará canalizaciones completas o llamadas a funciones de shell (aparentemente incluso bucles, pero el manual no parece prometer eso). Lo externotime
no puede, ya que está fuera del shell, no sabe sobre el código circundante.Si bien el tiempo se especifica en 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 potente como esta.
fuente