Передача аргументов в интерактивную программу не интерактивно
У меня есть 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.