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?
Examinons ce que time
utilise réellement la commande type
(voir help type
):
$ type -a time
time is a Shell keyword
time is /usr/bin/time
Donc, apparemment, time
sur notre système est à la fois
/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 time
est 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 man
name__, c’est-à-dire ici man time
.
Pour obtenir de l'aide sur les éléments intégrés à Bash, vous devez utiliser la commande help
name__: 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 time
est un mot clé Shell dans Bash, il n’existe pas dans sh
(Dash), où vous obtiendrez uniquement l’exécutable.
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".