'esperar' comportamento semelhante no script bash

4

Eu tenho um script (nomeie-o parent.sh ) que chama alguns outros scripts com base nos parâmetros de entrada.

Por fim, ele chama o script child.sh .
child.sh solicita a entrada do usuário caso descubra que alguns arquivos já existem:

"Would you like to replace the configuration file with a new one? (Yes/No/Abort): "

Agora, o que eu quero fazer é simular o pressionamento de tecla de "Y" / "y" dentro do script parent.sh para sempre sobrescrever os arquivos.

Eu não posso usar expect .

Como posso fazer isso?

    
por Peter 26.02.2013 / 09:15

1 resposta

1

Embora yes | child.sh como manatwork já tenha sido comentado seja uma solução válida, do ponto de vista de um programador eu colocaria o patch child.sh para lidar com este uso.

Como adicionar uma opção --force para não solicitar, mas sempre sobrescrever arquivos.

Mas, para responder ao assunto da sua pergunta e obter algo mais expect -like e não apenas enviar y por meio de um canal:

#!/bin/bash

fifo=fifo

mkfifo ${fifo}

exec 3<> ${fifo}

expect="Would you like to replace the configuration file with a new one? (Yes/No/Abort): "
answer="y"

while IFS= read -d $'
#!/bin/bash

fifo=fifo

mkfifo ${fifo}

exec 3<> ${fifo}

expect="Would you like to replace the configuration file with a new one? (Yes/No/Abort): "
answer="y"

while IFS= read -d $'%pre%' -n 1 a ; do
    str+="${a}"

    if [ "${str}" = "${expect}" ] ; then
        echo "!!! found: ${str}"
        echo ">>> sending answer: ${answer}"
        echo "${answer}" >&3
        unset str
    fi

    if [ "$a" = $'\n' ] ; then
        echo -n "--- discarding input line: ${str}"
        unset str
    fi
done < <(./child.sh <${fifo})

rm ${fifo}
' -n 1 a ; do str+="${a}" if [ "${str}" = "${expect}" ] ; then echo "!!! found: ${str}" echo ">>> sending answer: ${answer}" echo "${answer}" >&3 unset str fi if [ "$a" = $'\n' ] ; then echo -n "--- discarding input line: ${str}" unset str fi done < <(./child.sh <${fifo}) rm ${fifo}

Eu apenas escrevi isso .. então não é realmente à prova de falhas ou testado para resolver problemas específicos. Portanto, use a seu próprio risco 8) Alguns problemas de buffer de linha podem ocorrer sob algumas condições.

Mas pelo menos funcionou no meu cenário de teste.

    
por 27.03.2013 / 00:07

Tags