Eu quero desinstalar algum programa através de um script bash. Depois de executar o comando, o terminal me pergunta se tenho certeza de que quero desinstalá-lo. Então eu preciso responder y
. Quero fazê-lo automaticamente e responder y
após um atraso de 10 segundos.
Eu fiz este exemplo, mas não está funcionando -
#!/usr/bin
/opt/MNG/MNGVIEWHP/fe/uninstall
sleep 10
echo "y"
Qualquer ideia? Centos 7.2
#! /bin/bash -
vez de#!/usr/bin
uninstall
programa aceita parâmetros ou um script de configuração ou não. Será mais fácil assimuninstall
e aguarde até que ele saia. Então durma 10 segundos. Em seguida, o ecoy\n
na saída padrão (que ainda está ligado ao terminal, não a entrada padrão de qualquer programa)Respostas:
É para isso que
yes
serve o comando. Ele geray
s um por linha indefinidamente, para que possa ser canalizado para comandos que fazem perguntas sim / não.Isso responde
y
a todas as perguntas. Para respondern
a todas as perguntas, substituayes
poryes n
. Para uma mistura predefinida dey
en
, você pode substituiryes
por:Ou execute-o como:
Se você precisar que a resposta não esteja disponível para leitura antes de 10 segundos, faça:
Mas isso provavelmente não seria necessário, quando escrevermos
y
no canal, ele estará lá parauninstall
lê-lo sempre que quiser, é improvável que você precise esperar que esteja pronto para lê-lo. A exceção seria se vocêuninstall
decidir liberar a entrada antes de fazer a pergunta.Todos assumem que o
uninstall
comando apenas lê cada resposta como uma linha de entrada de sua entrada padrão.Para casos mais complexos, onde o comando lê as respostas diretamente do dispositivo tty ou onde você precisa de respostas de alimentação condicionalmente (por exemplo, com base no que as saídas de comando), que é onde você pode usar coisas como
expect
ouzsh
'szpty
.Observe que muitos programas interativos podem entrar em algum modo não interativo quando passam por alguma opção. Convém verificar o manual primeiro, antes de gastar muito esforço para solucionar o problema.
fonte
echo "y"
sempre, escrevemosy<newline>
, simulando você pressionandoy
seguido de Enter. Se você deseja simular pressionando Enter sozinho, isso estaria alimentando uma linha vazia, entãoprintf '%s\n' y n '' 2 3
(onde''
está a linha vazia).