Как мне написать ответ «да» для установки программ?

116

Я работаю с инстансами Amazon Linux, и у меня есть пара скриптов для заполнения данных и установки всех программ, с которыми я работаю, но пара программ спрашивает:

Do you want to continue [Y/n]?

и приостановите установку. Я хочу автоматически отвечать "Y" во всех случаях, я просто теперь знаю, как это сделать.

user974887
источник
3
Менеджер пакетов может иметь флаг --nopromptили, который --noconfirmвы можете использовать.
Blender

Ответы:

210

Команда «да» будет повторять эхо «y» (или как вам угодно) бесконечно. Используйте это как:

yes | command-that-asks-for-input

или, если требуется заглавная буква «Y»:

yes Y | command-that-asks-for-input
PT
источник
это работает только с некоторыми командами, поддерживающими использование ввода от да, не так ли? Я попытался взглянуть на OpenStack, и это не сработало, я думаю, что Expect более точен для всех обстоятельств
HVNSweeting
1
//, что делать, если нужно ввести слово «да» полностью?
Натан Басанезе,
1
Будьте осторожны, так yesкак это известно, чтобы максимально использовать процессор. stackoverflow.com/a/18164007/720665
Дэвид Саламон
Ницца. Это существенно облегчило мне жизнь. : D. Кроме того, поиск -yсценариев bash был ТРУДНО.
Натан Смит
1
@DavidSalamon, это только в том случае, когда он пишет что-то без ограничений, например /dev/nullили STDOUT. Переданный команде по конвейеру, он будет записывать в конвейер только одну строку каждый раз, когда принимающая команда считывает ее, и будет ждать в противном случае.
WALF
69

echo y | command должно сработать.

Кроме того, у некоторых установщиков есть флаг «авто-да». Это -yдля apt-getUbuntu.

Деннис
источник
Я пытаюсь сделать эхо "giturl no" | jspm registry создать имя_ реестра jspm-git в моем сценарии оболочки. но он продолжает терпеть неудачу. при входе в гюрль. Любая идея?
манизмку
Другой пример: в Докер-композе есть -f( --force) флаг , который работает как «авто-да» для команд , которые что - то удалить
Лука
Как вы рекурсивно "повторяете Y", если подсказка запрашивает подтверждение более одного раза?
Safak Ozkan
18

У вас может не быть возможности установить Expect на целевом сервере. Это часто бывает, когда кто-то пишет, скажем, работу Дженкинса.

Если это так, я бы рассмотрел что-то вроде ответа на следующий вопрос на askubuntu.com:

/ubuntu/338857/automatically-enter-input-in-command-line

printf 'y\nyes\nno\nmaybe\n' | ./script_that_needs_user_input

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

printf 'yyy' | ./script_that_needs_user_input

Для полноты вы также можете использовать здесь документ:

./script_that_needs_user_input << EOF
y
y
y
EOF

Или, если ваша оболочка поддерживает это, строку здесь:

./script <<< "y
y
y
"

Или вы можете создать файл с одним вводом в строке:

./script < inputfile

Опять же, вся заслуга в этом ответе принадлежит автору ответа на askubuntu.com , lesmana.

Натан Басанезе
источник
// Пожалуйста, не забудьте проголосовать за пользователя askubuntu.com @lesmana, если вам нравится этот ответ.
Натан Басанезе,
6

Хотя это может быть сложнее / тяжелее, чем вы хотите, один очень гибкий способ сделать это - использовать что-то вроде Expect (или одну из производных на другом языке программирования).

Expect - это язык, разработанный специально для управления текстовыми приложениями, и это именно то, что вам нужно. Если вам нужно сделать что-то более сложное (например, с логикой, чтобы решить, что делать / ответить дальше), Expect - это то, что вам нужно.

Адам Баткин
источник
6

Просто нужно поставить -yс помощью команды установки.

Например: yum install <package_to_install> -y

Рохан Сет
источник
3

Если вы хотите просто принять значения по умолчанию, вы можете использовать:

\n | ./shell_being_run
warhansen
источник
//, как это означает, что вы примете значения по умолчанию?
Nathan Basanese
2
В bash, shи самой системы, которую я знаю, что вам нужно echoв \nпротивном случае она не будет транспортироваться к следующей команде.
2i3r