Автоматизация ввода в сценарии Linux с ожидаемым — CloudSavvy IT

Баш Шелл

Команда Linux expect позволяет автоматизировать взаимодействие со скриптами и программами. Вы можете отправить любой ответ на сценарий, когда он ожидает ввода текста.

Автоматизация означает эффективность

Когда вы администрируете компьютер или группу компьютеров Linux, вы столкнетесь со многими повторяющимися задачами. Очевидный ответ — написать сценарий, который выполнит за вас большую часть работы. Оболочка Bash, как и все современные оболочки, предоставляет богатый и гибкий язык сценариев.

Создание сценариев для долгой или утомительной работы дает вам гибкость для выполнения этой задачи, когда офис закрыт, или в самые тихие периоды работы в режиме 24/7. Скрипты также обеспечивают повторяемость. Они не забудут выполнить шаг, независимо от того, сколько раз их просят выполнить одну и ту же работу.

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

В Linux есть команда yes, который отправляет поток символов «y» или другую указанную пользователем строку в окно терминала. Если программа ожидает ответа на вопрос «да» или «нет», ей будет принудительно введен один из символов «y». Он примет его как ввод и сможет продолжить. Вам нужно передать вывод yes в скрипт.
да | script.sh
Возможно, вы не захотите отправлять «да». Возможно, вам нужно ответить «нет». Вы также можете сделать это с помощью команды yes. Вы можете отправить любую понравившуюся фразу, вы не ограничены ответами типа «y», «Y», «Да», «n», «N» или «Нет». Возможно, вам нужно отправить букву «r» для переустановки в «установить / обновить / переустановить». [i/u/r] » Подсказка.
да г
Команда yes не справится, если ей нужно предоставить более одного ответа разных типов. В этой ситуации нам нужно использовать expect.

Установка команды expect

Мы тестировали expect на Ubuntu, Fedora и Manjaro. Пакет не был включен в эти дистрибутивы, поэтому его пришлось установить. В Ubuntu типа:
sudo apt install ожидать

В Fedora вам нужна следующая команда:
sudo dnf install ожидать

На Manjaro мы используем pacman:
sudo pacman -Вы ожидаете

Как ожидать работает

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

Допустим, у вас есть сценарий резервного копирования, который запрашивает имя исходного каталога и имя целевого каталога. затем он делает копию исходного каталога в целевом каталоге. Без битов, выполняющих копирование файлов, ваш скрипт мог бы выглядеть примерно так:
#! / bin / bash echo «Каталог для резервного копирования?» читать исходный_каталог echo «Место резервной копии?» читать target_directory echo echo «Целевой каталог:» $ target_directory
Все, что делает этот сценарий, — это запрашивает пути к двум каталогам. Он печатает целевой каталог в окне терминала, чтобы мы могли видеть, что он получил ответ от expect и мог правильно его прочитать.

Чтобы обеспечить вторую половину разговора, мы создаем «сценарий ожидания». По соглашению они имеют расширение «.exp». Этот пример будет работать с нашим сценарием «backup.sh».
#! / usr / bin / expect -f установить тайм-аут -1 spawn ./backup.sh ожидать «Каталог для резервного копирования? r» send — «/ home / dave / Documents / r» ожидать «Место резервного копирования? r «отправить -» / media / dave / external / backup r «ожидать eof
Здесь показаны три основные команды в сценариях ожидания: команды spawn, expect и send.

Первое, что нужно заметить это шебанг имеет в виду ожидать, а не Bash. Флаг -f (файл) сообщает, что ответы приходят из файла.

Мы фактически отключаем таймауты, устанавливая их на бесконечность с -1.

Команда spawn запускает сценарий резервного копирования.

Мы знаем два вопроса, которые нам задаст сценарий «backup.sh». Для каждого вопроса по очереди мы создаем строку «ожидать». Они содержат текстовое приглашение, которое будет отправлено в окно терминала сценарием «backup.sh». Это то, чего ожидает программа. Когда ожидаемый видит приглашение, текст в строке отправки возвращается сценарию «backup.sh».

Сделайте оба сценария исполняемыми:
chmod + x backup.sh chmod + x backup.exp

И используйте сценарий «backup.exp», чтобы запустить процесс.
./backup.exp

Вы можете увидеть два приглашения от «backup.sh» и ответы от «backup.exp».

-конец-

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *