Подтвердить что ты не робот

Попросите bash script ответить на интерактивные подсказки

Возможно ли, чтобы команды bash script автоматически обрабатывали запросы, которые обычно представлялись пользователю с действиями по умолчанию? В настоящее время я использую bash script для вызова внутреннего инструмента, который будет отображать подсказки пользователю (подсказка для Y/N) для завершения действий, однако script, который я пишу, должен быть полностью "hands-off", поэтому мне нужно отправить Y|N в приглашение, чтобы программа продолжала выполнение. Возможно ли это?

4b9b3361

Ответ 1

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

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

Ответ 2

Простой

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

Это позволит вам передать любую последовательность "Y" или "N" на ваш script.

Ответ 3

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

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

Ответ 4

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

$> yes Y |./your_script

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

$> yes N |./yout_script

Ответ 5

В моей ситуации мне нужно было ответить на некоторые вопросы без 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

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

запустить script просто в нужном каталоге и запустить 'sh autocomplete.sh' в терминале.

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

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

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

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