Передача аргументов в интерактивную программу не интерактивно

У меня есть bash script, который использует команду read для интерактивного чтения аргументов командам, например параметров да/нет. Есть ли способ вызвать этот script в неинтерактивном script передаче значений по умолчанию в качестве аргументов?

Это не единственный вариант, который мне нужно передать интерактивному script.

Ответы

Ответ 1

Для более сложных задач есть expect (http://en.wikipedia.org/wiki/Expect). Он в основном имитирует пользователя, вы можете закодировать script, как реагировать на конкретные выходы программы и связанные с ними вещи.

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

Ответ 2

Много способов

подключите ваш вход

echo "yes
no
maybe" | your_program

перенаправление из файла

your_program < answers.txt

используйте здесь документ (это может быть очень читаемо)

your_program << ANSWERS
yes
no
maybe
ANSWERS

используйте здесь строку

your_program <<< $'yes\nno\nmaybe\n'

Ответ 3

Вы можете поместить данные в файл и перенаправить его следующим образом:

$ cat file.sh
#!/bin/bash

read x
read y
echo $x
echo $y

Данные для script:

$ cat data.txt
2
3

Выполнение script:

$ file.sh < data.txt
2
3

Ответ 4

Просто хочу добавить еще один способ. Обнаружил его в другом месте и довольно просто. Скажем, я хочу передать "Да" для всех приглашений в командной строке для команды "execute_command". Тогда я просто передал бы да.

yes | execute_command

Это будет использовать yes в качестве ответа на все приглашения yes/no.