Сценарий оболочки для расчета прошедшего времени - PullRequest
2 голосов
/ 21 ноября 2010

Я пытался написать скрипт для выполнения программы на C и измерить время для выполнения, используя команду времени в Unix.

Сценарий выглядит следующим образом

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

Но после выполненияСкрипт файла log.txt содержит только слова рекурсивный и динамический.Значения времени, похоже, отсутствуют.Но выполнение команды time на терминале командной строки дало следующий вывод

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

Как можно отформатировать этот вывод так, чтобы он содержал только «реальное» время выполнения и записывался в файл журнала?

Ответы [ 2 ]

1 голос
/ 21 ноября 2010

Выход time отправляется в stderr. Вы должны перенаправить его .

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

И вы не можете иметь пробелы вокруг знака равенства. предпочтительнее использовать $() вместо обратных кавычек, так как его легче читать, нет путаницы с одинарными кавычками и их легче вкладывать.

1 голос
/ 21 ноября 2010

Когда вы присваиваете значения переменной, у вас не должно быть пробелов вокруг знака равенства.Например:

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

Если вы хотите только «реальное» время, используйте grep:

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

или %e в команде time:

r=`time -f '%e' /home/pop/Daa/./a.out`
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...