Пусть bash скрипт отвечает на интерактивные запросы
Возможно ли, чтобы bash-скрипт автоматически обрабатывал приглашения, которые обычно представляются пользователю с действиями по умолчанию? В настоящее время я использую сценарий bash для вызова внутреннего инструмента, который будет отображать пользователю подсказки (запрашивающие Y/N) для выполнения действий, однако сценарий, который я пишу, должен быть полностью "неактивным", поэтому Мне нужен способ отправить Y|N
на приглашение разрешить программе продолжить выполнение. Это возможно?
6 ответов
Просто
echo "Y Y N N Y N Y Y N" | ./your_script
Это позволит вам передать любую последовательность "Y" или "N" вашему сценарию.
Если у вас есть только Y, чтобы отправить:
$> yes Y |./your_script
Если у вас есть только N для отправки:
$> yes N |./yout_script
Я обнаружил, что лучший способ отправки ввода - использовать cat и текстовый файл для передачи любого ввода, которое вам нужно.
cat "input.txt" | ./Script.sh
Для этого есть специальная утилита - " да".
Чтобы ответить на все вопросы с одинаковым ответом, вы можете запустить
yes [answer] |./your_script
Или вы можете поместить его в свой сценарий, чтобы получить конкретный ответ на каждый вопрос
В моей ситуации мне нужно было ответить на некоторые вопросы без Y или N, но с текстом или пробелом. Я обнаружил, что лучший способ сделать это в моей ситуации - создать файл сценария. В моем случае я назвал это 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 в сочетании с Return Lines, вы можете при необходимости ответить на каждый вопрос приглашения. Каждая новая строка - это новый ответ.
Мой пример просто показывает, как это можно сделать с комментариями, также используя символ `, чтобы вы помнили, что представляет собой каждый шаг.
Обратите внимание, что другим преимуществом этого метода является то, что вы можете отвечать больше, чем просто Y или N ... на самом деле вы можете отвечать пробелами!
Надеюсь, это поможет кому-то.