Shell Script: Как прочитать стандартный вывод программы из консоли - PullRequest
0 голосов
/ 01 июля 2019

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

Я запускаю свою программу через сценарий оболочки с ./my_program arg1 arg2 (arg1 и arg2 - аргументы командной строки моей программы).После этого оболочка сценария постоянно выдает различные входные данные для my_program, чтобы проверить его, и в управляющем терминале (или консоли) стандартные выходные данные итеративно записываются следующим образом:

Connection established.
Intermediate result is expected_intermediate_result1
Final result is expected_result1
Connection established.
Intermediate result is expected_intermediate_result2
Final result is expected_result2

И это продолжается.Для каждого входа его выход известен.Таким образом, они сопоставляются раньше.

При сбое подключения: записывается Error in connection! Или результат может быть неправильным:

Connection established.
Intermediate result is result1
Final result is wrong_result1

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

Итак, я хочу прочитать результаты с консоли и сравнить их с ожидаемым результатом, чтобы определить случай, в котором есть несоответствие.

Я хочу, чтобы ваша помощь отредактировала этот код:

while read console line-by-line
if the line is other than expected result
store this case to text file
done

Некоторые предостережения: я не хочу использовать expect.Я просто хочу прочитать выводы программы, записанной в консоли.Я не использую файл журнала, поэтому поиск по файлу (grep) не будет использоваться.

Спасибо за помощь!

1 Ответ

1 голос
/ 01 июля 2019

Это то, что вы пытаетесь сделать?

./my_program arg1 arg2  |
grep -Fxq "Final result is expected_result1" || { printf 'Failed: "arg1 arg2" -> "expected_result1"\n'; exit 1; }

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

...