Учитывая файл, который был выведен script , есть ли способ выполнить все эти команды по порядку, а затем проверить, соответствует ли вывод тому, что было в файле сценария?

Я предполагаю, что diff можно использовать для последней части, но я понятия не имею, как сделать первую. Есть идеи?

Использование оболочки tcsh в Linux (Debian, но я сомневаюсь, что это имеет значение).

2 ответа2

1

Редактировать: Из руководства:

Скрипт помещает все в файл журнала, включая перевод строки и возвраты. Это не то, что ожидает наивный пользователь.

Это означает, что это можно сделать в простейших случаях, отыскивая вхождения $PS1 в выходных данных и выполняя строку после него, но вскоре это может стать невозможным:

  • Вы не можете видеть разницу между буквальным символом и символом escape, например ^C
  • Любые фоновые задания могут вставлять текст в любое время, портя вывод. while true; do sleep $RANDOM; echo garbage; done &
  • Если он записывает стандартную ошибку, возникает проблема с асинхронным выводом.

Если это вообще вариант, я бы предпочел использовать /var /log /cmdlog и посмотреть, есть ли весь текст, созданный командами, записанными там, где-нибудь в файле script .

0

Итак, одна из семантики diff состоит в том, что он выводит текст, если файлы различаются, и ничего не выводит, если они одинаковы.

Учитывая файлы foo и bar , вот что вы можете сделать:

# Run your script
if [ "$(diff foo bar)" = "" ]; then
    echo "They are the same"
else
    echo "They are different"
fi

( Ваша первая часть не совсем понятна - у вас есть пример выходных данных out.template и script > out.log и вы хотите убедиться, что out.template и out.log совпадают? Или что-то другое?)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .