Script Bash pour calculer le temps écoulé
Je suis en train d'écrire un script en bash pour calculer le temps écoulé pour l'exécution de mes ordres, pensez à:
STARTTIME=$(date +%s)
#command block that takes time to complete...
#........
ENDTIME=$(date +%s)
echo "It takes $($ENDTIME - $STARTTIME) seconds to complete this task..."
Je suppose que ma logique est correcte cependant je me retrouve avec la suite de imprimer:
"Il faut quelques secondes pour effectuer cette tâche..."
Quelque chose de mal avec mon évaluation de la chaîne?
Je crois bash variables non typées, j'aimerais si il y a une "chaîne de caractères en entier" méthode de bash néanmoins.
- pouvez-vous faire cela comme une réponse?
- Une chose est sûre Michael Mao.
Vous devez vous connecter pour publier un commentaire.
Soit
$(())
ou$[]
de travail pour le calcul du résultat d'une opération arithmétique. Vous êtes à l'aide de$()
qui est tout simplement la prise de la chaîne et de les évaluer comme une commande. C'est un peu une distinction subtile. Espérons que cette aide.Que tink a souligné dans les commentaires sur cette réponse,
$[]
est obsolète, et$(())
devrait être favorisée.Je trouve ça très propre d'utiliser la variable interne "$SECONDES"
SECONDS=0 ; sleep 10 ; echo $SECONDS
$SECONDS
ne fonctionne en effet pour /bin/bash. Il ne fonctionne pas pour le /bin/dash, le shell par défaut dans Debian et Ubuntu.Vous essayez d'exécuter le nombre dans la
ENDTIME
comme une commande. Vous devriez également voir un message d'erreur tel que1370306857: command not found
. Au lieu d'utiliser l' l'expansion arithmétique:Vous pouvez également enregistrer les commandes dans un script séparé,
commands.sh
, et à utiliser le temps de commande:Vous pouvez utiliser Bash est
time
mot-clé ici, avec une chaîne de formatVoici ce que le référence dit à propos de
TIMEFORMAT
:Essayez le code suivant:
essayez d'utiliser le temps avec l'écoulement de la seconde option:
/usr/bin/time -f%e sleep 1
sous bash.ou
\time -f%e sleep 1
en interactif bash.voir la page de man:
et
/bin/time
ne va pas de travail ici: OP mentionne un bloc. Nous avons donc vraiment besoin le mot-clétime
ici.Pour un plus grand nombre, nous conseillons de les imprimer dans un format plus lisible. L'exemple ci-dessous fait même que les autres, mais aussi des impressions de "l'homme" format:
Des tests simples:
De sortie:
À utiliser dans un script comme expliqué dans d'autres posts (capture de point de départ puis d'appeler la fonction avec le temps à l'arrivée: