2015-05-31 2 views
3

У меня есть сценарий bash, который имеет несколько вопросов, можно ли автоматически заполнить ответы?Bash script - Ответ автозаполнения

./script.sh install 

ответы в порядке y 2 1 n n

Как я могу сделать это в Баш?

Редактировать: можно ли передать только первый ответ?

echo "y" | install 

и позвольте выбрать пользователю ответы на следующие вопросы?

+0

Как в поступлениях без ввода пользователем? Или просто позволяет пользователю нажать Enter, чтобы продолжить настройку по умолчанию? – andars

+0

Как и при поступлении без ввода пользователем –

+0

Вам понадобится создать оболочку, и если вы точно знаете порядок и значения аргументов, вы можете использовать 'expect' или echo для передачи аргументов исходному скрипту. Вы можете найти много таких примеров в SE/SO. – rahul

ответ

5

Я бы пропускать here document для стандартного ввода:

./script.sh install <<EOF 
y 
2 
1 
n 
n 
EOF 

Если вы хотите на одной строке, вы можете также использовать echo:

echo -e "y\n2\n1\nn\nn" | ./script.sh install 

Однако я предпочитаю здесь решение документа поскольку оно ИМХО более читабельна.

+0

спасибо, что он отлично работает –

+0

Тогда вы можете прочитать http://meta.stackexchange.com/questions/14994/do-you-feel-dirty-if-you-nudge-new-users-to-accept-your- answer-when-they-indicat ... – boardrider

+0

@ hek2mgl i отредактировал вопрос –

3

Другой метод является использование здесь строки (который имеет преимущество устранения одной линии трубы, но не подоболочка):

./script.sh install <<<$(printf "y\n2\n1\nn\nn\n") 

Вы также можете иметь возможность полагаться на printf trick для печати всех элементов с помощью спецификатора одиночного формата и использования замены процесса (или использования с синтаксисом строки выше):

./script.sh install < <(printf "%c\n" y 2 1 n n) 
+0

Я тоже об этой строке, но я не мог найти никаких преимуществ по сравнению с 'echo -e | ... 'в этом случае, потому что по-прежнему требуется запуск дополнительной команды. IMHO 'echo -e ... | 'более читается – hek2mgl

+0

Да, ваше право, без заметного преимущества, просто еще один способ скининга одной и той же кошки. –

+0

Да, не беспокойтесь, я просто хотел упомянуть об этом. – hek2mgl