2010-09-27 3 views
51

Возможно ли, чтобы скрипт bash автоматически обрабатывал подсказки, которые обычно представляются пользователю с действиями по умолчанию? В настоящее время я использую скрипт bash для вызова встроенного инструмента, который будет отображать подсказки пользователю (подсказка для Y/N) для выполнения действий, однако написанный мной сценарий должен быть полностью «отключен», поэтому Мне нужен способ отправить Y|N в приглашение, чтобы программа продолжала выполнение. Это возможно?Есть ли сценарий ответа bash на интерактивные подсказки

+0

это не «автозаполнение» ... как @unwind говорит, что это «автоматизация» – benzaita

+1

Пример использования 'yes' для этого: http://unix.stackexchange.com/questions/47344/the-yes- command # comment65866_47344 – Droogans

ответ

39

Это не «автозаполнение», это автоматизация. Один общий инструмент для этих вещей называется Expect.

Вы также можете уйти от всего лишь ввода трубопровода от yes.

+1

К сожалению, я не могу использовать expect, поскольку они являются строгими требованиями к пространству в системе, запускающей это, поэтому я не могу добавить дополнительные пакеты, но piping 'yes' in сделал трюк, к счастью, все подсказки требовали только y ' так или иначе. Благодарю. – tj111

+0

Однако 'Да! command' может работать не всегда. Если это просто для установки, то я упал с использованием '-y' - лучший и предпочтительный вариант. –

96

Простой

echo "Y Y N N Y N Y Y N" | ./your_script 

Это позволит вам пройти любую последовательность «Y» или «N» к вашему сценарию.

+0

Если мне нужно было отправить какие-либо 'N', я бы использовал этот метод, но мне нужен был только Y, поэтому я пошел с' yes'. Жаль, что я не могу принять два ответа, так как они оба правильные. – tj111

+2

;) Хорошо, если вам когда-нибудь понадобится отправить какой-то «N», у вас теперь есть хороший способ сделать это. –

+0

Это обходное решение блестяще для моего ленивого поведения CLI. Спасибо! – mbb

9

Я нашел, что лучший способ отправить ввод - использовать кошку и текстовый файл, чтобы передать все необходимые вам данные.

cat "input.txt" | ./Script.sh 
7

Если у вас есть только Y отправить:

$> yes Y |./your_script 

Если у вас есть только N отправить:

$> yes N |./yout_script 
4

В моей ситуации мне нужно ответить на некоторые вопросы без Y или N но с текстом или пробелом. Я нашел лучший способ сделать это в моей ситуации, чтобы создать файл shellscript. В моем случае я назвал его autocomplete.sh

Мне нужно было ответить на некоторые вопросы для экспортера схемы доктрины, поэтому мой файл выглядел так.

- Это пример только -

php vendor/bin/mysql-workbench-schema-export mysqlworkbenchfile.mwb ./doctrine << EOF 
`#Export to Doctrine Annotation Format`          1 
`#Would you like to change the setup configuration before exporting`  y 
`#Log to console`               y 
`#Log file`                 testing.log 
`#Filename [%entity%.%extension%]` 
`#Indentation [4]` 
`#Use tabs [no]` 
`#Eol delimeter (win, unix) [win]` 
`#Backup existing file [yes]` 
`#Add generator info as comment [yes]` 
`#Skip plural name checking [no]` 
`#Use logged storage [no]` 
`#Sort tables and views [yes]` 
`#Export only table categorized []` 
`#Enhance many to many detection [yes]` 
`#Skip many to many tables [yes]` 
`#Bundle namespace []` 
`#Entity namespace []` 
`#Repository namespace []` 
`#Use automatic repository [yes]` 
`#Skip column with relation [no]` 
`#Related var name format [%name%%related%]` 
`#Nullable attribute (auto, always) [auto]` 
`#Generated value strategy (auto, identity, sequence, table, none) [auto]` 
`#Default cascade (persist, remove, detach, merge, all, refresh,) [no]` 
`#Use annotation prefix [ORM\]` 
`#Skip getter and setter [no]` 
`#Generate entity serialization [yes]` 
`#Generate extendable entity [no]`           y 
`#Quote identifier strategy (auto, always, none) [auto]` 
`#Extends class []` 
`#Property typehint [no]` 
EOF 

Что мне нравится в этой стратегии вы можете прокомментировать то, что ваши ответы и используя ВФ пустую строку только что (ответ по умолчанию). Оказывается, этот инструмент экспортера имеет свой собственный JSON-аналог для ответа на эти вопросы, но я понял это после того, как сделал это =).

для запуска сценария просто в каталоге, который вы хотите, и запустите 'sh autocomplete.sh' в терминале.

Короче говоря, используя < < EOL & EOFв сочетании с обратными линиями вы можете ответить на каждый вопрос о приглашении по мере необходимости. Каждая новая строка - это новый ответ.

Мой пример показывает, как это можно сделать с комментариями, используя символ ``, чтобы вы помнили, что такое каждый шаг.

Обратите внимание на другое преимущество этого метода: вы можете ответить более чем с Y или N ... на самом деле вы можете ответить пробелами!

Надеюсь, что это поможет кому-то.

+1

Пожалуйста, дайте мне знать, почему downvote, это заняло много времени, чтобы узнать, что это был ответ (и был только ответом в моем случае). Я поставил его здесь, чтобы поделиться с сообществом, и он должен быть мертвым по цели для вопросителя. «Возможно ли, что скрипт bash автоматически обрабатывает подсказки, которые обычно будут представлены пользователю с действиями по умолчанию?», Да, используя то, что у меня выше, является методом для этого. –

 Смежные вопросы

  • Нет связанных вопросов^_^