2010-11-21 21 views
2

J'essayais d'écrire un script pour exécuter un programme C et mesurer le temps d'exécution en utilisant la commande de temps sous Unix.Script shell pour calculer le temps écoulé

Le script ressemble suit

cc /home/pop/Daa/abc.c 

r = `time /home/pop/Daa/./a.out` 

echo "recursion" $r >> log.txt 

cc /home/pop/Daa/xyz.c 

d = `time /home/pop/Daa/./a.out ` 

echo "dynamic" $d >> log.txt 

Mais après l'exécution du script le fichier log.txt ne contient que des mots récursivité et dynamique. Les valeurs de temps semblent manquer. Mais l'exécution de commande de temps sur le terminal de ligne de commande a donné le résultat suivant

real 0m0.001s 
user 0m0.000s 
sys 0m0.000s 

Comment obtenir cette sortie formatée pour contenir seulement le temps « réel » de l'exécution et écrit dans le fichier journal?

Répondre

1

La sortie de time va à stderr. Vous devez redirect it.

TIMEFORMAT=%R 
r=$({ time /home/pop/Daa/./a.out; } 2>&1) 

Et vous ne pouvez pas avoir d'espaces autour du signe égal. Il est preferable d'utiliser $() au lieu de backticks car il est plus facile à lire, il n'y a pas de confusion avec les guillemets simples et il est plus facile de les imbriquer.

1

Lorsque vous affectez des valeurs à une variable, vous ne devez pas avoir d'espaces autour du signe égal. Par exemple:

r=`time /home/pop/Daa/./a.out` 

Si vous voulez que le temps "réel", utilisez grep:

r=`time /home/pop/Daa/./a.out | grep real` 

ou utilisez %e dans la commande time:

r=`time -f '%e' /home/pop/Daa/./a.out` 
+0

"-f: commande non trouvée" - puisque Bash a un 'time' intégré. Si vous voulez afficher seulement le temps réel, utilisez la variable 'TIMEFORMAT'. Ou, pour utiliser 'time -f', vous devez spécifier l'utilisation de l'utilitaire externe:' command time -f ... 'ou'/usr/bin/time -f ... '. –

Questions connexes