10
votes

Comment stocker une sous-chaîne de la fonction de «temps» dans le script Bash

de sorte que la fonction de temps intégrée pour bash devrait sortir dans ce format xxx

Je souhaite enregistrer l'heure de l'utilisateur en millisecondes, comme 001 Qu'est-ce qu'un moyen propre de le faire?


0 commentaires

3 Réponses :


1
votes

Utilisation de la chaîne de chaîne intégrée de Bash Vous pouvez faire quelque chose comme ceci:

+ output='real 0m0.002s
user 0m0.001s
sys  0m0.000s'
+ user='0m0.001s
sys  0m0.000s'
+ user=0m0.001
+ min=0
+ sec=0.001
+ sec=0
+ usec=001
+ time=1


1 commentaires

Le problème consiste à obtenir la sortie de dans $ sortie en premier lieu.



15
votes

Le moyen propre consiste à utiliser la variable timeformat shell pour imprimer uniquement les informations de l'utilisateur. ( homme bash pour plus de détails.)

Puis, bien sûr, vous devez capturer la sortie de celle-ci. Cela est impossible à faire dans le pipeline, car il est fait à l'intérieur de la coquille, mais vous pouvez l'exécuter dans un sous-(-shirt, et la sortie ira à l'erreur standard. Mais vous devez ensuite rediriger la sortie de la commande ailleurs. Ici, je viens de le jeter, mais de nombreuses autres possibilités existent, selon exactement ce que vous devez faire. Ensuite, vous devez connaître d.ddd dans dddd . Il suffit de supprimer la période le fera. xxx

Si vous le souhaitez, vous pouvez ajouter | Sed S / ^ 0 * // Pour éliminer les zéros principaux.

% R donnera du temps réel,% s du système système. Vous pouvez modifier la précision avec E.G. % 6U pour obtenir des microsecondes, bien que la plupart des systèmes ne soient nulle part à proximité de celle précise.

homme bash pour obtenir de l'aide sur les redirections. Man TR et Man SED Pour obtenir de l'aide sur la façon de les utiliser.


2 commentaires

Plutôt que de la tuyauterie à tr , une fois que vous avez foo = "0.00x" Vous pouvez simplement utiliser l'expansion de paramètre et la sortie $ {foo # *.} Pour obtenir juste 00x . Quoi qu'il en soit, bon appel à la variable TimeFormat, n'a jamais vu celui-ci avant.


Homme, mon écran flash-fu Unix n'est jamais assez brillant. Il y a toujours une manière stupéfiante et très spécifique de faire quelque chose de froid dans un coin sombre de la documentation. +1 pour timeformat - beaucoup mieux que le script (bien que simple) SED que je allais faire.



13
votes

BASH'S Heure Constrée est un peu difficile à capturer car il possède une manipulation spéciale de manière à pouvoir retourner le temps de traitement pour un pipeline entier comme Time LS -L | Trier | UNIQ plutôt que le temps de traitement uniquement pour la commande ls -l dans mon exemple.

La meilleure façon de capturer juste la sortie du temps est la technique de redirection suivante: xxx

à ce stade si vous deviez echo "$ foo" Vous verriez quelque chose sur l'ordre de xxx

maintenant pour obtenir juste le 004 une partie de ce que vous Avoir une autre option: sed, awk ou droite bash pour nommer le sommet 3. Mon préféré personnel serait awk et il ressemblerait à ceci comme suit: xxx

maintenant si vous étaient à echo "$ foo" vous verriez juste 004 comme désiré


0 commentaires