Помогите с псевдонимами в скриптах оболочки - PullRequest
0 голосов
/ 23 мая 2011

У меня есть следующий код, который предназначен для запуска java-программы на каком-либо входе и проверки этого ввода на предмет файла результатов для проверки.

#!/bin/bash
java Program ../tests/test"$@".tst > test"$@".asm
spim -f test"$@".asm > temp
diff temp ../results/test"$@".out

Суть приведенного выше кода заключается в следующем:

  1. Запустите программу для тестового файла в другом каталоге и перенаправьте вывод в файл сборки.
  2. Запустите процессор MIPS на выходе этой программы, скопировав его в файл с именем temp.
  3. Запустите 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

1 Ответ

1 голос
/ 23 мая 2011

Если вы предоставите несколько аргументов командной строки, то ясно, что $@ расширится до списка из нескольких аргументов, что означает, что все ваши команды будут бессмысленными.

Что вы ожидаете от несколькихаргументы?

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