Я хочу удалить некоторую программу через скрипт bash. После запуска команды терминал спрашивает меня, уверен ли я, что хочу ее удалить. Поэтому мне нужно ответить y
. Я хочу сделать это автоматически и ответить y
через 10 секунд.
Я сделал этот пример, но он не работает -
#!/usr/bin
/opt/MNG/MNGVIEWHP/fe/uninstall
sleep 10
echo "y"
Есть идеи? Centos 7.2
#! /bin/bash -
а не#!/usr/bin
uninstall
принимает ли программа параметры или скрипт конфигурации или нет. Так будет прощеuninstall
и дождитесь его завершения. Затем спите 10 секунд. Затем откликнитесьy\n
на stdout (который все еще подключен к терминалу, а не к stdin какой-либо программы)Ответы:
Для этого и нужна
yes
команда. Он выводит поy
одному на строку в течение неопределенного времени, поэтому его можно передавать по командам, которые задают вопросы «да / нет».Это ответы
y
на все вопросы. Чтобы ответитьn
на все вопросы, заменитеyes
наyes n
. Для предопределенного сочетанияy
иn
вы можете заменитьyes
на:Или запустите его как:
Если вам нужен ответ, который не будет доступен для чтения до 10 секунд, вы должны сделать:
Но, вероятно, в этом нет необходимости, когда мы пишем
y
в канал, он будет там,uninstall
чтобы читать его всякий раз, когда захочет его прочитать, вряд ли вам придется ждать, пока он будет готов прочитать его. Исключением будет, еслиuninstall
решит сбросить ввод, прежде чем задавать вопрос.Все они предполагают, что
uninstall
команда просто читает каждый ответ как одну строку ввода со своего стандартного ввода.Для более сложных случаев, когда команда читает ответы непосредственно с терминала , устройства или где вам нужно кормить ответы условно (например , на основе каких командных результатов), то, где вы бы использовать такие вещи , как
expect
иzsh
«szpty
.Обратите внимание, что многие интерактивные программы могут переходить в неинтерактивный режим, когда передается некоторая опция. Вы можете сначала проверить их руководство, прежде чем тратить слишком много усилий на решение проблемы.
источник
echo "y"
и каждый раз, когда мы пишемy<newline>
, имитируя нажатие,y
а затем Enter. Если вы хотите смоделировать нажатие клавиши Enter в одиночку, это будет означать подачу пустой строки, поэтомуprintf '%s\n' y n '' 2 3
(где''
пустая строка).