У меня есть следующий код, который предназначен для запуска java-программы на каком-либо входе и проверки этого ввода на предмет файла результатов для проверки.
#!/bin/bash
java Program ../tests/test"$@".tst > test"$@".asm
spim -f test"$@".asm > temp
diff temp ../results/test"$@".out
Суть приведенного выше кода заключается в следующем:
- Запустите программу для тестового файла в другом каталоге и перенаправьте вывод в файл сборки.
- Запустите процессор MIPS на выходе этой программы, скопировав его в файл с именем temp.
- Запустите diff на сгенерированном мной выходе и ожидаемый результат.
Я сделал этот сценарий оболочки, чтобы помочь мне автоматизировать проверку моего домашнего задания для класса. Мне больше не хотелось проверять вещи вручную.
Я, должно быть, что-то делаю не так, поскольку, хотя эта программа работает с одним аргументом, она терпит неудачу с более чем одним. Вывод, который я получу, если я использую $ @, будет:
./test.sh: line 2: test"$@".asm: ambiguous redirect
Cannot open file: `test0'
EDIT:
Ах, я понял это. Этот код исправил проблему:
#!/bin/bash
for arg in $@
do
java Parser ../tests/test"$arg".tst > test"$arg".asm
spim -f test"$arg".asm > temp
diff temp ../results/test"$arg".out
done
Оказывается, bash должен интерпретировать разные аргументы cmd каждый раз, когда я вызывал $ @.
enter code here