Preparar respostas para perguntas de um comando

14

Digamos que eu queira escrever um script de shell que execute apenas um comando. Mas esse comando é mal projetado. Não oferece opções de linha de comando; em vez disso, ele faz algumas perguntas e aguarda a entrada do usuário.

Existe uma maneira de preparar essa entrada no script para que as perguntas sejam respondidas automaticamente?

    
por tmuecksch 20.05.2015 / 22:17

3 respostas

15

Se o comando não for muito exigente, deve funcionar com algo assim:

command > /dev/null << EOF
<answer 1>
<answer 2>
<answer 3>
EOF

Isso requer que você saiba as respostas exatas de antemão.

    
por 20.05.2015 / 22:23
15

A expectativa pode fazer isso. Do site :

Expect is a tool for automating interactive applications such as telnet, ftp, passwd, fsck, rlogin, tip, etc. Expect really makes this stuff trivial. Expect is also useful for testing these same applications [...]"

Ele vem com muita ajuda, como autoexpecta .

Novamente no site da Espera,

autoexpect watches you interacting with another program and creates an Expect script that reproduces your interactions. For straightline scripts, autoexpect saves substantial time over writing scripts by hand.

    
por 20.05.2015 / 22:25
7

Se o seu script espera um prompt respondido ou vários prompts nos quais você pode dar a mesma resposta, há yes :

NAME
       yes - output a string repeatedly until killed

SYNOPSIS
       yes [STRING]...
       yes OPTION

DESCRIPTION
       Repeatedly output a line with all specified STRING(s), or 'y'.

Use assim:

yes Me | give_a_hug.sh
    
por 21.05.2015 / 09:35