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

У меня есть скрипт 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 выводит полученный ввод на экран и одновременно сохраняет его в файл.

Другие вопросы по тегам