Вход из оболочки script

У меня есть script, который вызывает приложение, которое требует ввода пользователя, например. которое требует, чтобы пользователь вводил "Y" или "N".
Как я могу заставить оболочку script не запрашивать у пользователя ввода, а использовать значение из предопределенной переменной в script?

В моем случае будут два вопроса, требующие ввода.

Ответ 1

Вы можете использовать любой текст, который вы хотите использовать на stdin, и он будет таким же, как и сам тип пользователя. Например, для имитации ввода "Y" просто используйте:

echo "Y" | myapp

или используя переменную оболочки:

echo $ANSWER | myapp

Существует также команда unix под названием "да", которая выводит непрерывный поток "y" для приложений, которые задают множество вопросов, на которые вы просто хотите ответить утвердительно.

Ответ 2

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

$ man expect

http://oreilly.com/catalog/expect/chapter/ch03.html

Ответ 3

Если приложение читает из stdin (в отличие от /dev/tty, как, например, программа passwd), то многострочный вход является идеальным кандидатом для данного документа.

#!/bin/sh

the_app [app options here] <<EOF
Yes
No
Maybe
Do it with $SHELL
Quit
EOF

Как вы можете видеть, здесь-документы даже позволяют замену параметров. Если вы этого не хотите, используйте <<'EOF'.

Ответ 4

Я предпочитаю этот способ: если вам нужны несколько входов... вы помещаете несколько выражений эха следующим образом:

 { echo Y; Y; } | sh install.sh >> install.out

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