Возможно ли, чтобы сценарий bash автоматически обрабатывал запросы, которые обычно представляются пользователю с действиями по умолчанию? В настоящее время я использую сценарий bash для вызова внутреннего инструмента, который будет отображать подсказки пользователю (с запросом «Да / Нет») для выполнения действий, однако сценарий, который я пишу, должен быть полностью «отключенным», поэтому Мне нужен способ отправить Y|N
в приглашение, чтобы программа могла продолжить выполнение. Это возможно?
Сценарий bash отвечает на интерактивные запросы
Ответы (6)
Это не «автозаполнение», это автоматизация. Один из распространенных инструментов для этих целей называется Expect.
Вы также можете обойтись простым вводом данных от yes
.
yes
in помогло, к счастью, для всех запросов в любом случае требовалось только «y». Спасибо.
- person TJ L; 27.09.2010
Yes | command
может работать не всегда. Если это просто для установки, то я решил, что -y
- лучший и предпочтительный вариант.
- person Umesh Kaushik; 14.03.2017
Expect
отвечать на запросы пароля? Например, git pull
требует, чтобы я ввел свое имя пользователя и пароль. Пароль не отображается на экране, он скрыт. Может Expect
справиться с этим?
- person Xbox One; 11.11.2020
Просто
echo "Y Y N N Y N Y Y N" | ./your_script
Это позволяет вам передавать в сценарий любую последовательность «Y» или «N».
N
, я бы использовал этот метод, но мне нужны были только Y, поэтому я выбрал yes
. Жаль, что я не могу принять два ответа, так как они оба правильные.
- person TJ L; 27.09.2010
N
, теперь у вас есть хороший способ это сделать.
- person Loïc Février; 27.09.2010
"Y N"
в качестве входных данных для первого приглашения и зависает во втором приглашении, ожидая, пока я его завершу. Я попытался заменить пробелы на новые строки, но это тоже не сработало, по-прежнему выдавала буквальную строку в подсказку.
- person temporary_user_name; 28.05.2015
printf 'y\ny\ny\n' | ./your_script
. Таким образом, вы вручную вставляете новую строку для каждой ожидаемой записи.
- person Majid; 22.06.2015
printf '%s\n' Y Y N N Y N Y Y N
помещает символы новой строки между элементами, но без одной большой строки формата.
- person Charles Duffy; 22.06.2018
sudo
и ssh
необычны - они запрашивают из TTY, а не из стандартного ввода, по соображениям безопасности. Тем не менее, вы действительно не должны использовать sudo для запуска git. Лучше исправить ваши разрешения, чтобы ваша учетная запись обычного пользователя владела всеми задействованными файлами; выполнение операций контроля версий с повышенными привилегиями означает, что ошибка безопасности в git 0w затрагивает всю вашу коробку, а не только вашу личную учетную запись.
- person Charles Duffy; 22.06.2018
Я обнаружил, что лучший способ отправить ввод - это использовать cat и текстовый файл для передачи любого ввода, который вам нужен.
cat "input.txt" | ./Script.sh
Если у вас есть только Y для отправки:
$> yes Y |./your_script
Если у вас есть только N для отправки:
$> yes N |./your_script
В моей ситуации мне нужно было отвечать на некоторые вопросы без «Да» или «Нет», но с текстом или пробелом. Я обнаружил, что лучший способ сделать это в моей ситуации - это создать файл сценария оболочки. В моем случае я назвал его 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-аналог для ответов на эти вопросы, но я понял это после того, как сделал это =).
чтобы запустить сценарий, просто перейдите в нужный каталог и запустите 'sh autocomplete.sh'
в терминале.
Короче говоря, используя ‹< EOL & EOF в сочетании со строками возврата, вы можете при необходимости ответить на каждый вопрос в подсказке. Каждая новая строка - это новый ответ.
Мой пример просто показывает, как это можно сделать с комментариями, также использующими символ `, чтобы вы запомнили, что собой представляет каждый шаг.
Обратите внимание, что еще одним преимуществом этого метода является то, что вы можете ответить, используя не только «Да» или «Нет» ... на самом деле вы можете отвечать пробелами!
Надеюсь, это кому-то поможет.
Для этого есть специальная встроенная утилита - «yes».
Чтобы ответить на все вопросы одним и тем же ответом, вы можете запустить
yes [answer] |./your_script
Или вы можете поместить его в свой сценарий, чтобы получить конкретный ответ на каждый вопрос
yes
для этого: unix.stackexchange.com / questions / 47344 / - person Droogans   schedule 22.09.2015