Je veux exécuter quelque chose dans un shell Linux sous quelques conditions différentes, et être capable de produire le temps d'exécution de chaque exécution.
Je sais que je pourrais écrire un script perl ou python qui ferait cela, mais est-il possible de le faire dans le shell? (qui se trouve être bash)
Ticks
même que le boîtier Windows?Réponses:
Utilisez le
time
mot - clé intégré :Exemple:
la source
time -p i=x; while read line; do x=x; done < /path/to/file.txt
? Il renvoie immédiatement 0,00 sauf si je ne mets rien avant la boucle while .. qu'est-ce qui donne?time
puissiez chronométrer un pipeline entier tel quel (en raison d'être un mot-clé Bash ), vous devez utiliser une commande de groupe ({ ...; ...; }
) pour chronométrer plusieurs commandes:time -p { i=x; while read line; do x=x; done < /path/to/file.txt; }
type -a time
Vous pouvez obtenir des informations beaucoup plus détaillées que le bash intégré
time
(que Robert Gamble mentionne) en utilisant time (1) . C'est normalement le cas/usr/bin/time
.Note de l'éditeur: pour vous assurer que vous appelez l' utilitaire externe
time
plutôt que letime
mot clé de votre shell , invoquez-le en tant que/usr/bin/time
.time
est un utilitaire mandaté par POSIX , mais la seule option qu'il doit prendre en charge est-p
.Des plates-formes spécifiques implémentent des extensions spécifiques non standard:
-v
fonctionne avec l' utilitaire GNUtime
, comme illustré ci-dessous (la question est baliséelinux); l'implémentation BSD / macOS utilise-l
pour produire une sortie similaire - voirman 1 time
.Exemple de sortie détaillée:
la source
la source
Pour une mesure delta ligne par ligne, essayez gnomon .
Vous pouvez également utiliser les options
--high
et / ou--medium
pour spécifier un seuil de longueur en secondes, sur lequel gnomon mettra en surbrillance l'horodatage en rouge ou en jaune. Et vous pouvez aussi faire quelques autres choses.la source
Si vous voulez plus de précision, utilisez
%N
avecdate
(et utilisezbc
pour le diff, car$(())
ne gère que les entiers).Voici comment procéder:
Exemple:
Résultat:
la source
Si vous avez l'intention d'utiliser les heures plus tard pour calculer avec, découvrez comment utiliser l'
-f
option de/usr/bin/time
pour générer du code qui fait gagner du temps. Voici du code que j'ai utilisé récemment pour obtenir et trier les temps d'exécution de toute une classe de programmes d'étudiants:Plus tard, j'ai concaténé tous les
$timefile
fichiers et dirigé la sortie vers un interpréteur Lua . Vous pouvez faire de même avec Python ou bash ou quelle que soit votre syntaxe préférée. J'adore cette technique.la source
/usr/bin/time
est nécessaire car bienwhich time
que vous dira le contraire, si vous exécutez simplementtime
, il exécutera la version de votre shelltime
qui n'accepte aucun argument.env time
Si vous avez seulement besoin d'une précision à la seconde près, vous pouvez utiliser la
$SECONDS
variable intégrée , qui compte le nombre de secondes pendant lesquelles le shell a été exécuté.la source
Vous pouvez utiliser
time
et sous - shell()
:Ou dans la même coque
{}
:la source
(
&)
(nouveau contexte, sous - shell ), et d'autres avec{
&}
(même shell, même contexte)Le chemin est
la sortie est >>
la source
-lphtread
ou de-o
balises. Il suffit d'utiliser latime
commande, ce que la réponse acceptée explique mieux.une méthode peut-être simple (qui peut ne pas répondre aux besoins des différents utilisateurs) est l'utilisation du shell PROMPT.it est une solution simple qui peut être utile dans certains cas. Vous pouvez utiliser la fonction d'invite bash comme dans l'exemple ci-dessous:
La commande ci-dessus entraînera la modification de l'invite du shell en:
Chaque fois que vous exécutez une commande (ou appuyez sur Entrée) pour revenir à l'invite du shell, l'invite affiche l'heure actuelle.
notes:
1) sachez que si vous avez attendu un certain temps avant de taper votre prochaine commande, cette heure doit être prise en compte, c'est-à-dire que l'heure affichée dans l'invite du shell est l'horodatage lorsque l'invite du shell a été affichée, pas lorsque vous entrez la commande. certains utilisateurs choisissent d'appuyer sur la touche Entrée pour obtenir une nouvelle invite avec un nouvel horodatage avant d'être prêts pour la prochaine commande.
2) Il existe d'autres options et modificateurs disponibles qui peuvent être utilisés pour modifier l'invite bash, reportez-vous à (man bash) pour plus de détails.
la source