Usar el comando "time" incorporado en bash en lugar del comando externo

12

Al trabajar con el timecomando, me encontré con una situación en la que debería usar el timecomando de tiempo GNU incorporado en lugar del externo /usr/bin/time. Entonces, ¿cómo puedo hacer esto? Vi en alguna parte que usar enabley / o commandayudaría, pero no lo hicieron.

Este es un caso de uso:

watch "time ls"

que usa el /usr/bin/timecomando externo , que no quiero! Esto sucede cuando timeinvoca la función bash interna cuando ejecuto time lsen una terminal, así:

$ time ls

Tenga en cuenta que la solicitud exactamente opuesta ha sido respondida aquí:

Hay mucha diferencia con dos comandos. El interno timees más preciso (que quiero), pero el comando externo tiene más opciones (que no necesito).

Ho1
fuente
watch 'bash -c "builtin time ls"'¿quizás?
Glenn Jackman
1
ver aquí sobre cómo forzar bash para utilizar órdenes internas, consulte respuesta2 de Petr Utzl: builtin timedebe hacer el truco.
Fiximan
2
@Fiximan, timeno está incorporado bash, es una palabra reservada del idioma para que pueda programar las tuberías (como time foo | bar) o los comandos compuestos (como time for i in...;done)
Stéphane Chazelas

Respuestas:

13

Por defecto, watchse ejecuta el comando con /bin/sh -c '...'lo que la salida se ve es cómo /bin/shinterpreta el timecomando. Al /bin/shparecer, no tiene un incorporado time.

Para ejecutar el comando con un shell diferente, use la -xopción para deshacerse del valor predeterminado, luego agregue su propia invocación explícita del shell cuya construcción desea.

watch -x bash -c 'time ls'
watch -x zsh -c 'time ls'

No importa cómo se ejecute watch, el comando que está viendo no es un elemento secundario del shell que ejecutó el watchcomando, por lo que la configuración del shell no es directamente relevante.

Stéphane Chazelas
fuente