Iniciar comando e fornecer parâmetro de prompt

3

Eu tenho um comando que constrói coisas e, em seguida, fornece um shell interativo através de prompt (por exemplo, digite R para reiniciar, Q para sair, ...).

Eu gostaria de usar esse comando, mas pará-lo quando ele chegar à parte do prompt. Existe uma maneira de passar o argumento "Q" ao chamar meu comando ou matá-lo uma vez que ele atinja o prompt?

    
por user276648 09.06.2016 / 04:21

2 respostas

2

Dado que o seu script está lendo "normalmente" por meio de read , você pode fornecer informações antecipadamente com outro programa como echo ou printf por meio de um canal:

echo Q | your-program-here

Um exemplo mais complexo poderia ser:

(echo 1; echo thing2; echo yes; echo Q) | your-program-here

E scripts ainda mais complexos de entrada automática podem ser feitos com programas como .

    
por 09.06.2016 / 12:01
1

Para garantir que o comando não esperará pela entrada interativa, bastará redirecionar sua entrada de algum lugar. A maioria dos programas como o que você descreve saem assim que atingem o final da entrada padrão, portanto, se você não quiser que o programa faça nada, exceto seu trabalho inicial, passe-o para a entrada vazia.

thatcommand </dev/null

Se você quiser passar alguma entrada fixa, você pode usar um documento aqui .

thatcommand <<EOF
Q
EOF

Você pode incluir variáveis em um documento aqui também. Se a entrada precisar ser construída de forma mais dinâmica, você pode canalizar qualquer código de shell que desejar.

{
  # complex shell code goes here
  echo Q
} | thatcommand

Eu assumo que o programa lê a partir da entrada padrão. Alguns programas forçam a leitura do terminal, portanto, o redirecionamento de entrada não funciona neles. Nesses casos, você precisa de uma ferramenta como espera . Esperar também é útil se a entrada que você precisa alimentar para o programa depender de alguma saída anterior.

    
por 10.06.2016 / 02:51