Вход из оболочки 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 в файл журнала, который будет архивироваться и просматриваться позже.