Як я автоматично відповідаю y у скрипті bash?


15

Я хочу видалити якусь програму через скрипт bash. Після запуску команди термінал запитує, чи я впевнений, що хочу його видалити. Тому мені потрібно відповісти y. Я хочу зробити це автоматично і відповісти yпісля затримки на 10 секунд.

Я зробив цей приклад, але він не працює -

#!/usr/bin
/opt/MNG/MNGVIEWHP/fe/uninstall
sleep 10
echo "y"

Будь-яка ідея? Centos 7.2


6
ITYM, #! /bin/bash -а не#!/usr/bin
Стефан Шазелас

перевірте, чи uninstallпрограма приймає параметри чи сценарій конфігурації чи ні. Так буде простіше
phuclv

1
Запитання та відповіді на рекламні нудоти в Інтернеті. " це не працює" - це не добре роз'яснення проблеми. Можливо, ви можете констатувати, наскільки ваша проблема відрізняється від незліченних інших.

2
Що насправді робить ваш сценарій: запустіть uninstallі дочекайтеся його виходу. Потім спати 10 секунд. Тоді відлуння y\nдо stdout (який досі підключений до терміналу, а не до stdin будь-якої програми)
Пітер Кордес,

Відповіді:


49

Ось для чого призначена yesкоманда. Він виводить ys по одному на рядок нескінченно, так що його можна передати командам, які задають питання "так" або "ні".

yes | /opt/MNG/MNGVIEWHP/fe/uninstall

Це відповідає yна всі запитання. Щоб відповісти nна всі запитання, замініть yesна yes n. Для попередньо визначеної суміші yта n, ви можете замінити yesна:

printf '%s\n' y n n y y n...

Або запустити його як:

/opt/MNG/MNGVIEWHP/fe/uninstall << 'EOF'
y
n
n
y
y
n
EOF

Якщо вам потрібна відповідь, яка не може бути доступною для читання до 10 секунд, ви зробите:

(sleep 10; echo y; sleep 2; echo n;...) | /opt/MNG/MNGVIEWHP/fe/uninstall

Але це, мабуть, не буде необхідним, коли ми пишемо yв трубу, вона буде там, uninstallщоб прочитати її, коли вона хоче її прочитати, навряд чи вам доведеться чекати, коли вона буде готова її прочитати. Виняток складеться, якщо він uninstallвирішить стерти дані, перш ніж задавати питання.

Усі припускають, що uninstallкоманда просто читає кожну відповідь як один рядок введення зі свого стандартного вводу.

Для більш складних випадків, коли команда читає відповіді безпосередньо з пристрою tty або де вам потрібно умовно подавати відповіді (наприклад, виходячи з того, що команда виводить), саме тут ви б використовували такі речі, як expectабо zshs zpty.

Зауважте, що багато інтерактивних програм можуть увійти в деякий неінтерактивний режим, коли передано якусь опцію. Ви можете спочатку перевірити їх посібник, перш ніж витрачати занадто багато зусиль на вирішення проблеми.


Дякую! Це добре, якщо нам потрібно відповісти лише на одне питання. Що сталося, якщо нам, наприклад, відповісти на 20 питань?
Шалев

@Shalev, див. Редагувати.
Стефан Шазелас

Дякую ! Отже, якщо я хочу ввести інші значення, такі як interger (наприклад 2), мені потрібно замінити його замість "y"? printf '% s \ n' ynnyyn 2 3 ny | / opt / MNG / MNGVIEWHP / fe / uninstall
Шалев Сасон

Так, це ідея.
Стефан Шазелас

3
@ShalevSason, у всіх рішеннях, які я давав, як і echo "y"кожен раз, коли ми пишемо y<newline>, імітуючи натискання, yа потім Enter. Якщо ви хочете імітувати натискання клавіші Enter, це буде подавати порожній рядок, тому printf '%s\n' y n '' 2 3(де ''порожній рядок).
Стефан Шазелас
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.