Передача аргументов в интерактивную программу неинтерактивно
У меня есть скрипт Bash, который использует read
команда для интерактивного чтения аргументов команд, например, опции да / нет. Есть ли способ вызвать этот сценарий в неинтерактивном сценарии, передавая значения параметров по умолчанию в качестве аргументов?
Это не просто один вариант, который я должен передать интерактивному сценарию.
4 ответа
Для более сложных задач есть expect
( http://en.wikipedia.org/wiki/Expect). Он в основном имитирует пользователя, вы можете написать сценарий, как реагировать на конкретные программные результаты и связанные вещи.
Это также работает в таких случаях, как ssh
это запрещает передавать пароли к нему.
Много способов
передать ваш вклад
echo "yes
no
maybe" | your_program
перенаправление из файла
your_program < answers.txt
используйте здесь документ (это может быть очень читабельным)
your_program << ANSWERS
yes
no
maybe
ANSWERS
используйте здесь строку
your_program <<< $'yes\nno\nmaybe\n'
Вы можете поместить данные в файл и перенаправить их так:
$ cat file.sh
#!/bin/bash
read x
read y
echo $x
echo $y
Данные для скрипта:
$ cat data.txt
2
3
Выполнение скрипта:
$ file.sh < data.txt
2
3
Просто хочу добавить еще один способ. Нашел его в другом месте, и это довольно просто. Скажем, я хочу передать да для всех запросов в командной строке для команды "execute_command", тогда я просто передам "да" на него.
yes | execute_command
Это будет использовать да в качестве ответа на все вопросы да / нет.
Вы также можете использовать printf для передачи ввода в ваш скрипт.
var=val
printf "yes\nno\nmaybe\n$var\n" | ./your_script.sh
Другой альтернативой может быть
echo "something" | tee /path/to/file
Команда tee выводит полученный ввод на экран и одновременно сохраняет его в файл.