~$ /usr/bin/time -f "%e: " echo test
test
0.00:
Je veux que la sortie soit
0.00: test
Comment pourrais-je accomplir ceci?
Réponses:
Sauf si vous demandez une forme de voyage dans le temps, vous devez capturer le résultat et le réorganiser. time
affiche son résultat en erreur standard.
$ /usr/bin/time -f "%e: " echo test >so 2>se; echo $(<se) $(<so)
0.01: test
g++
enverra n'importe quelle sortie (puisqu'elle ne produira qu'une sortie en cas d'erreur) à stderr
. C'est assez complexe pour que vous souhaitiez utiliser un script wrapper. En outre, envisagez-vous d’emballer la sortie (normalement inexistante) de g++
, ou la commande en écho de make
? Ce dernier ne peut pas être fait facilement en faisant écho à la commande réelle.
make
règles de modèle. Voir gnu.org/software/make/manual/make.html#Pattern-Rules pour gmake
; c'est pareil pour d'autres versions de make
bien que les détails spécifiques seront différents.
Comme le dit la réponse de geekosaur, le temps est imprimé sur stderr et votre commande sur stdout. Et le temps attend la fin de votre commande avant d'écrire sa sortie. Je pense que vous devriez essayer le programme sponge
du paquet moreutils
, comme ça:
/usr/bin/time -f "%e: " echo test | sponge
Sponge est un programme qui absorbe toute l’entrée et l’écrit à la fermeture de l’entrée (c’est-à-dire que le programme précédent se termine). Ce qui précède fonctionne parce que le temps s’imprimera sur stderr lorsque l’écho sera terminé et que sa sortie standard sera absorbée par l’éponge, qui ne s’effacera que lorsque le côté gauche sera terminé. Autant que je sache, cela correspond à peu près à ce que vous voulez, bien que je n’aie pas pu le tester avec une exactitude totale, car le système / usr / bin / time de mon système ne prend pas en charge l’option -f.
(/usr/bin/time echo test | sponge) 2>&1