Як скриптувати відповідь "так" для встановлення програм?


113

Я працюю з екземплярами Amazon Linux, і у мене є кілька сценаріїв для заповнення даних та встановлення всіх програм, з якими я працюю, але пара програм вимагає:

Do you want to continue [Y/n]?

і призупинити встановлення. Я хочу автоматично відповісти "Y" у всіх випадках, я просто зараз впевнений, як це зробити.


3
Диспетчер пакунків може мати --nopromptабо --noconfirmпрапор, який ви можете використовувати.
Блендер

Відповіді:


209

Команда "так" повторюватиметься "y" (або все, що ви попросите) нескінченно. Використовуйте його як:

yes | command-that-asks-for-input

або, якщо потрібен капітал "Y":

yes Y | command-that-asks-for-input

це працює лише з якоюсь командою, що підтримується, щоб використовувати вхід з так, чи не так? Я спробував поглянути з OpenStack, і це не спрацювало, я думаю, що Очікування є більш точним для всіх обставин
HVNSweeting

1
//, Що робити, якщо вам доведеться ввести повне слово "так"?
Натан Басанес

1
Будьте обережні, yesоскільки, як відомо, максимум процесора. stackoverflow.com/a/18164007/720665
Девід Саламон

Приємно. Це просто полегшило моє життя. : D. Також вдаючись до допомоги -yдля Баш сценаріїв було важко.
Натан Сміт

1
@DavidSalamon, це лише той випадок, коли він пише щось без обмежень, наприклад, /dev/nullабо STDOUT. Передаючи команду, вона запише лише один рядок у трубу кожного разу, коли команда, що приймає, прочитає одну, і буде чекати інакше.
Walf

68

echo y | command повинен працювати.

Також деякі інсталятори мають прапор "auto-yes". Це -yдля apt-getUbuntu.


Я намагаюся зробити відлуння "giturl no" | Реєстр jspm створить ім'я_реєстру jspm-git в моєму сценарії оболонки. але він продовжує провалюватися. під час вступу в жирл. Будь-яка ідея?
manismku

Ще один приклад: у docker-compose є прапор -f( --force), який працює як "auto-yes" для команд, які щось видаляють
luke

Як ви "повторюєте Y" рекурсивно, якщо підказка не раз просить підтвердження?
Сафак Озкан

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 - це мова, розроблена спеціально для управління текстовими програмами, що саме ви шукаєте. Якщо вам знадобиться зробити щось складніше (наприклад, з логікою, щоб насправді вирішити, що робити / відповісти далі), очікувати - це шлях.


6

Вам просто потрібно поставити -yза допомогою команди install.

Наприклад: yum install <package_to_install> -y


3

Якщо ви хочете просто прийняти стандартні налаштування, ви можете скористатися:

\n | ./shell_being_run

//, як це означає, що ви приймаєте за замовчуванням?
Натан Басанес

2
В bash, shі самої системи, яку я знаю, що вам потрібно echoв \nіншому випадку вона не буде транспортуватися до наступної команді.
2i3r
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.