Как написать сценарий для запуска программы несколько раз и сохранить время в файле? - PullRequest
1 голос
/ 08 июня 2019

Я пытаюсь запустить скрипт для запуска моей программы, написанной на C, которая является простой программой сортировки, чтобы сравнить ее со встроенной функцией в unix. Я хочу взять пользовательское время как из sort (unix), так и из функции sort 100 раз и поместить его в файл excel, csv для сравнения алгоритмов.

И моя функция, и функция сортировки работают, когда я запускаю ее вручную, но я не знаю, как написать код, чтобы автоматизировать этот процесс 100 раз.

#!/bin/sh
for i in {1..100}
do
     for t in 01
     do
     echo ===Test $t ====
     time sort -n <tests/$t > tests/$t.expected
     time ./useIntList <tests/$t> tests/$t.observed
     done
done
rm tests/*.expected tests/*.obsereved

Я запускаю программу 100 раз, но я не знаю, как получить пользовательское время в массив и распечатать его в файл.

1 Ответ

2 голосов
/ 08 июня 2019

time записывает свой вывод в stderr, а не stdout.Это также встроенная оболочка, которая выполняет команду после нее, включая перенаправления ввода-вывода, вне времени.Поэтому вам нужно поместить команду времени в блок и перенаправить за пределы блока.

Вы также должны использовать #!/bin/bash.Синтаксис, такой как {1..100}, является расширением bash, он может быть недоступен при использовании #!/bin/sh.

#!/bin/sh
for i in {1..100}
do
     for t in 01
     do
     echo ===Test $t ====
     { time sort -n <tests/$t > tests/$t.expected; } 2>tests/$t.time.expected
     { time ./useIntList <tests/$t> tests/$t.observed; } 2>tests/$t.time.observed
     done
done
rm tests/*.expected tests/*.obsereved

Файлы *.time.* будут содержать выходные данные time.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...