Отправлять входные данные для запуска сценария оболочки из bash - PullRequest
1 голос
/ 01 мая 2011

Я пишу набор тестов для своего приложения и использую скрипт bash, чтобы проверить, соответствует ли вывод набора тестов ожидаемому результату. Вот часть скрипта:

for filename in test/*.bcs ;
do
    ./BCSC $filename > /dev/null
    NUMBER=`echo "$filename" | awk -F"[./]" '{print $2}'`
    gcc -g -m32 -mstackrealign runtime.c $filename.s -o test/e$NUMBER
    # run the file and diff against expected output
    echo "Running test file... "$filename
    test/e$NUMBER > test/e$NUMBER.out
    if [ $NUMBER = "4" ]
    then
        # it's trying to read the line
        # Pass some input to the file...
    fi
    diff test/e$NUMBER.out test/o$NUMBER.out
done

Тест № 4 проверяет чтение ввода из стандартного ввода. Я хотел бы проверить на сценарий № 4, и если так, передайте ему набор входных данных.

Я только что понял, что ты мог бы сделать это как

test/e4 < test/e4.in > test/e4.out

, где e4.in имеет пример входных данных. Есть ли другой способ передать ввод в работающий скрипт?

Ответы [ 3 ]

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

Если вы хотите предоставить входные данные непосредственно в сценарии, используйте следующий документ:

    test/e$NUMBER > test/e$NUMBER.out
    if [ $NUMBER = "4" ]; then
    then
        test/e$NUMBER > test/e$NUMBER.out <<END_DATA
test input goes here
you can supply as many lines of input as you want
END_DATA
    else
        test/e$NUMBER > test/e$NUMBER.out
    fi

Существует несколько вариантов: если вы заключите в кавычки разделитель (т.е. <<'END_DATA'), он выиграетне делайте такие вещи, как replace $ variable replace в документе здесь.Если вы используете <<-DELIMITER, он удалит символы первой вкладки из каждой строки ввода (так что вы можете сделать отступ для ввода в соответствии с окружающим кодом).Подробности см. В разделе «Здесь документы» на справочной странице bash.

0 голосов
/ 01 мая 2011

Вы можете сделать:

cat test/e4.in | test/e4 > test/e4.out
0 голосов
/ 01 мая 2011

Упомянутый вами способ - это обычный метод перенаправления файла в stdin при вводе команды / скрипта.

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

...