Cela n'a pas de sens. Vous ne savez pas combien de temps la commande a pris jusqu'à ce qu'elle ait exécuté toutes ses sorties.
Neil
/ usr / bin / time -f "% e:" test d'écho & gt; so 2 & gt; se; echo $ (
Réponses:
6
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
Comment pourrais-je faire cela dans un fichier make? Je voulais envelopper "CXX = g ++"
C'est en fait une question assez différente, comme 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.
geekosaur
N'importe quoi. Je viens de me rendre compte que la sortie ne venait pas de gcc, mais du fichier make. Vous avez raison. Quand il compile main.cpp, il sort "main.cpp", comment ferais-je "0:04: main.cpp", quelque chose comme ça?
1
C'est plus compliqué, car la macro n'a pas accès au nom de fichier que vous voulez faire écho. vous devez remplacer le 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.
geekosaur
1
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.
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.la source
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) deg++
, ou la commande en écho demake
? 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 pourgmake
; c'est pareil pour d'autres versions demake
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 paquetmoreutils
, comme ça: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.
la source
(/usr/bin/time echo test | sponge) 2>&1
Je ne pense pas que ce soit possible. Une façon de le faire est de capturer la sortie dans une variable et de la manipuler.
la source