En travaillant avec la time
commande, je suis tombé sur une situation où je devrais utiliser la commande intégrée time
plutôt que la commande externe GNU time /usr/bin/time
. Alors, comment puis-je faire cela? J'ai vu quelque part que l'utilisation enable
et / ou command
aiderait, mais ils ne l'ont pas fait.
Ceci est un cas d'utilisation:
watch "time ls"
qui utilise la /usr/bin/time
commande externe , dont je ne veux pas! Cela se produit lorsque time
j'appelle la fonction bash interne lorsque j'exécute time ls
sur un terminal, comme ceci:
$ time ls
Veuillez noter que la demande opposée exacte a été répondue ici:
Il y a beaucoup de différence avec deux commandes. L'intérieur time
est plus précis (ce que je veux), mais la commande externe a plus d'options (dont je n'ai pas besoin).
watch 'bash -c "builtin time ls"'
peut-être?builtin time
devrait faire l'affaire.time
n'est pas une fonction intégréebash
, c'est un mot réservé du langage, vous pouvez donc chronométrer les pipelines (commetime foo | bar
) ou les commandes composées (commetime for i in...;done
)Réponses:
Par défaut,
watch
exécute votre commande avec/bin/sh -c '...'
la sortie que vous voyez est la façon dont/bin/sh
interprète latime
commande. Votre/bin/sh
apparemment n'a pas de fonction intégréetime
.Pour exécuter la commande avec un autre shell, utilisez l'
-x
option pour supprimer la valeur par défaut, puis ajoutez votre propre invocation explicite du shell dont vous voulez la construction.Peu importe comment vous exécutez
watch
, la commande que vous regardez n'est pas un enfant du shell qui a exécuté lawatch
commande, de sorte que les paramètres du shell ne sont pas directement pertinents.la source