Estou testando o Expect para obter um modelo básico funcionando. Eu criei um script bash de demonstração que faz algumas perguntas e gera as entradas para um arquivo.
Quando executo o arquivo .exp diretamente ou através do "expect FILENAME", ou mesmo quando uso o autoexpect, recebo os erros abaixo que sugerem que ele não foi interpretado corretamente (esperado arquivo .exp?). O que devo fazer para que o Expect com um script bash funcione?
- Estou testando usando o Ubuntu através do WSL como o sistema operacional e o CMD (o bash é executado para usar os comandos WSL e bash normais, portanto, não tenho certeza se isso tem algum efeito.).
Esperar arquivo:
#!/usr/bin/expect -f
set timeout -1
spawn /bin/bash "./test-interactive.sh"
# expect "*"
expect "Please fill in each prompt."
send -- "a\r"
expect "*"
send -- "b\r"
expect "Please fill in each prompt."
# expect "*"
send -- "c\r"
expect "*"
send -- "d\r"
expect eof
Arquivo de shell bash:
#!/bin/bash
_message="Please fill in each prompt."
echo $_message
read a
read b
echo $_message
echo -n "$ "
read x
echo -n "$ "
read y
echo ""
echo "Accepting following inputs"
echo $a
echo $b
echo $x
echo $y
echo ""
echo "a: $a b: $b x: $x y: $y" > output.txt
# read -p "Press enter to exit"
Resultado:
spawn /bin/bash ./test-interactive.sh
./test-interactive.sh: line 2: $'\r': command not found
./test-interactive.sh: line 4: $'\r': command not found
Please fill in each prompt.
a
b
./test-interactive.sh: line 6: $'\r': command not found
': not a valid identifierne 7: read: `a
': not a valid identifierne 8: read: `b
./test-interactive.sh: line 9: $'\r': command not found
Please fill in each prompt.
c
d
./test-interactive.sh: line 11: $'\r': command not found
': not a valid identifierne 13: read: `x
': not a valid identifierne 15: read: `y
./test-interactive.sh: line 16: $'\r': command not found
Accepting following inputs
Você tem terminações de linha DOS (CRLF) em seu
bash
script,test-interactive.sh
. Isso provavelmente ocorre porque você desenvolveu esse script em um editor no Windows que, por padrão, termina as linhas com\r\n
em vez das\n
terminações nas máquinas *nix. Como tal, quando o script é executado, ele engasga com o extra\r
que você está vendo abaixo. Limpe seu script antes de executá-lo fazendo