Что не так?
Точки с запятой не нужны, хотя они не приносят вреда.
Начальный цикл ввода выглядит хорошо.
Назначение j=i
отличается от j=$i
.
Вы запускаете программу ./a.out
, не предоставляя ей никакого ввода.
Затем у вас есть цикл, который должен был повторять ввод.Он обеспечивает ввод в обратном направлении по сравнению с тем, как он был прочитан.
Вы повторяете выполнение программы ./test
без предоставления какого-либо ввода, после чего следует цикл повторения, который должен был повторить ввод, но этот не дает результатаиз-за неправильного назначения.
Затем вы запускаете diff
на двух выходах, полученных из неопределенных входных данных.
Вы не очищаете временные файлы.
Как сделатьit
Этот скрипт прост - за исключением того, что он обеспечивает очистку временных файлов.
tmp=${TMPDIR:-/tmp}/tester.$$
trap "rm -f $tmp.?; exit 1" 0 1 2 3 13 15
cat - > $tmp.1
./a.out < $tmp.1 > $tmp.2
./test < $tmp.1 > $tmp.3
diff $tmp.2 $tmp.3
rm -f $tmp.?
trap 0
exit 0
Первым шагом является захват ввода в файле $tmp.1
.Затем запустите две тестовые программы, записав выходные данные в файлы $tmp.2
и $tmp.3
.Затем возьмите разницу между двумя файлами.
Первая строка trap
гарантирует, что временные файлы будут удалены при выходе из оболочки или при получении сигнала из набора {HUP, INT, QUIT, PIPE, СРОК }.Вторая строка trap
отменяет ловушку 'exit', чтобы скрипт мог успешно завершиться.(Вы можете передать статус выхода diff
вызывающей программе (оболочке), зафиксировав его статус выхода status=$?
и затем используя exit $status
.)