web-dev-qa-db-fra.com

Quelle est la différence entre time et / usr / bin / time?

J'ai deux commandes qui sont identiques, mais elles ne partagent pas le même paramètre:

  • time -f "%E %C" mycommandtomeasure
  • /usr/bin/time -f "%E %C" mycommandtomeasure

Le premier ne s'exécute pas, le second le fait. Le premier ne trouve pas le paramètre -f. Lors de la vérification de whereis time, je reçois le chemin /usr/bin/time; je le comprends donc ainsi que time correspond à la même commande que /usr/bin/time.

Apparemment, mon hypothèse est fausse cependant. Quelqu'un pourrait-il m'aider à élaborer?

7
Socrates

Examinons ce que timeutilise réellement la commande type(voir help type):

$ type -a time
time is a Shell keyword
time is /usr/bin/time

Donc, apparemment, timesur notre système est à la fois

  • un mot clé directement intégré à votre shell Bash
  • un fichier exécutable /usr/bin/time

Étant donné que les mots-clés Shell ont priorité sur les exécutables, ce que vous exécutez en tapant uniquement timeest le mot-clé Shell. Vous le voyez également dans l'ordre dans lequel type -a les répertorie ou dans la sortie de type time, qui répertorie uniquement le type effectif.

Maintenant, vérifions ce que chacun de ceux-ci peut faire:

  • Les exécutables ont généralement une page de manuel (page de manuel), que nous pouvons ouvrir et lire à l’aide de la commande manname__, c’est-à-dire ici man time.

  • Pour obtenir de l'aide sur les éléments intégrés à Bash, vous devez utiliser la commande helpname__: help time

Vous remarquerez que le mot-clé Shell prend en charge moins d’options que l’exécutable, mais qu’il présente d’autres avantages, comme vous le pouvez par exemple. Bash complexe de temps construit comme les pipelines avec elle. Voir la fin de cette réponse pour un exemple.

Si vous devez utiliser l'exécutable au lieu du mot clé Shell, vous pouvez taper le chemin d'accès complet, c'est-à-dire /usr/bin/time, ou préfixer la commande avec une barre oblique inverse pour empêcher Bash de l'évaluer: \time

En passant, alors que timeest un mot clé Shell dans Bash, il n’existe pas dans sh(Dash), où vous obtiendrez uniquement l’exécutable.

12
Byte Commander

Lorsque vous exécutez time, vous exécutez une commande intégrée dans Shell qui ne prend pas en charge toutes les fonctionnalités.

Lorsque vous exécutez /usr/bin/time, vous exécutez un véritable programme GNU time.

Vous pouvez définir un alias pour qu'il utilise toujours le "vrai".

3
Pilot6