Підготуйте відповіді на запитання команди


14

Скажімо, я хочу написати скрипт оболонки, який виконує лише одну команду. Але ця команда погано розроблена. Він не пропонує жодних параметрів командного рядка; натомість він задає деякі питання і чекає введення користувачем.

Чи є спосіб підготувати цей вклад у сценарії, щоб відповісти на запитання автоматично?

Відповіді:


16

Якщо команда не дуже вибаглива, вона повинна працювати з чимось подібним:

command > /dev/null << EOF
<answer 1>
<answer 2>
<answer 3>
EOF

Для цього потрібно заздалегідь знати точні відповіді.


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

Також відомий як документ ТУТ, для отримання додаткової інформації ви можете спробувати тут Вікіпедію визначення документа
OldTimer

15

Очікуйте, що це можна зробити. З веб-сайту Expect :

Expect - це інструмент для автоматизації інтерактивних додатків, таких як telnet, ftp, passwd, fsck, rlogin, tip тощо. Очікування дійсно робить цей матеріал банальним. Очікуйте також корисно для тестування цих самих додатків [...] "

Він надається з великою допомогою, як автопогляд .

Знову з веб-сайту Expect,

autoexpect спостерігає за взаємодією з іншою програмою та створює сценарій очікування, який відтворює ваші взаємодії. Для прямолінійних сценаріїв автоекспедиція економить значний час над написанням сценаріїв вручну.


Спасибі за вашу відповідь. Оскільки мої потреби дуже низькі, очікування в моєму випадку надмірне. Відповідь Бьорнса ідеально відповідає моїм потребам. Але я б запропонував зберегти свою відповідь для інших, хто потребує більш складного рішення.
tmuecksch

+1, тому що я не знав, що існує автоматичне очікування, і я подумав, що крива очікування на навчання занадто крута, щоб я могла турбуватися. Я ще погляну.
Джо

7

Якщо ваш сценарій очікує відповіді на одну підказку або кілька підказок, в яких ви можете дати ту саму відповідь, є yes:

NAME
       yes - output a string repeatedly until killed

SYNOPSIS
       yes [STRING]...
       yes OPTION

DESCRIPTION
       Repeatedly output a line with all specified STRING(s), or `y'.

Використовуйте його так:

yes Me | give_a_hug.sh

3
Поширене, хоча іронічне вживання yes n, наприклад:yes n | mv -i * somewhere/
Сем Уоткінс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.