Estou executando um script que solicita a inserção de 'y' em cada operação, estou procurando uma solução que goste $ ./script < echo 'yyyyyyyyyyyyyy'
de passar todas as minhas entradas de uma só vez.
command-line
input
NewMrd
fonte
fonte
-f
opção funciona bem com determinados comandos.Respostas:
Existe um comando criado especificamente para esse caso:
yes
O que isso faz é conectar a saída de
yes
à entrada de./script
. Então, quando./script
solicita a entrada do usuário, ela obtém a saída deyes
. A saída deyes
é um fluxo interminável dey
seguido por uma nova linha. Então, basicamente, como se o usuário estivesse entrandoy
para todas as perguntas de./script
.Se você quiser dizer não (
n
) em vez de sim (y
), faça o seguinte:Observe que algumas ferramentas têm a opção de sempre assumir
yes
como resposta. Veja aqui por exemplo: ignore o prompt yes / no em 'apt-get upgrade'Outros métodos para inserir entrada:
Se você sabe exatamente quantos
y
scripts o seu está esperando, você pode fazê-lo assim:As novas linhas (
\n
) são as teclas de entrada.Usando em
printf
vez deyes
você, você tem um controle mais refinado da entrada:Observe que, em alguns casos raros, o comando não exige que o usuário pressione enter após o caractere. nesse caso, deixe as novas linhas de fora:
Por uma questão de integridade, você também pode usar um documento aqui :
Ou se o seu shell suportar uma string here :
Ou você pode criar um arquivo com uma entrada por linha:
Se o comando for suficientemente complexo e os métodos acima não forem mais suficientes, você poderá usar o expect .
Aqui está um exemplo de um script de espera super simples:
Nitpick técnico:
A chamada de comando hipotético que você deu na sua pergunta não funciona:
Isso ocorre porque a gramática do shell permite um operador de redirecionamento em qualquer lugar da linha de comando. No que diz respeito ao shell, sua linha de comando hipotética é a mesma que esta:
Isso significa
./script
que será chamado com o argumento'yyyyyyyyyyyyyy'
e o stdin obterá entrada de um arquivo chamadoecho
. E o bash reclama, já que o arquivo não existe.fonte
cannot enable tty mode on non tty input
. Você conheceria uma solução alternativa para isso?printf
truque com umrun
arquivo do qual preciso automatizar o processo de instalação, tudo o que acontece é que recebo uma mensagem de erro dizendoWarning: Tried to connect to session manager, None of the authentication protocols specified are supported
, e o script é aberto em um novo terminal e solicita que eu insira minha entrada manualmente, como de costume. A propósito, isso está acontecendo no Debian. Alguma sugestão?Use o comando
yes
:Trecho da página de manual:
fonte
Algumas coisas (
apt-get
por exemplo) aceitam sinalizadores especiais para executar no modo silencioso (e aceitam padrões). Noapt-get
caso, você apenas passa uma-y
bandeira. Isso depende completamente do seu script.Se você precisar de coisas mais complicadas, poderá agrupar seu script em um script esperado. expect permite que você leia a saída e envie a entrada para que você possa fazer coisas bastante complicadas que outros scripts não permitiriam. Aqui está um dos exemplos de sua página da Wikipedia :
fonte
.sh
script de shell, certo? Ou existe um caminho?No script shell, você também pode usar o seguinte truque de desova, esperar e enviar
No entanto, no cenário acima, você deverá fornecer a frase que espera obter enquanto executa o script. Para obter mais exemplos, acesse o link a seguir
Espere no Bash
fonte
Ok, isso pode não ser uma solução muito elegante, mas se você escrever suas opções em um arquivo separado e depois passá-lo como uma entrada para o script, também funcionará. Portanto, se você criar um novo arquivo com todas as suas opções (chame esse arquivo como 'options.in'), poderá executar facilmente seu script
./script.sh < options.in
e editar / criar arquivos de opções diferentes, conforme adequado.fonte
options.in
arquivo? Você pode dar um exemplo?Eu estava escrevendo um script bash com o Dialog e precisava que isso acontecesse automaticamente também. Eu fiz isso e funcionou como um encanto.
fonte
Você pode fornecer entrada do usuário ao seu script com
cat
, a partir de um arquivo de texto, canalizado para o seu script dabash
seguinte maneira:Basta inserir a entrada do usuário desejada no arquivo input.txt, quaisquer que sejam as respostas desejadas - y, n, dígitos, seqüências de caracteres, etc.
fonte