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.