Esperar script está retornando erros ao gerar o script bash. Por quê? [duplicado]

2

Estou testando Espero obter um modelo básico funcionando. Eu criei um script demo bash que faz algumas perguntas e envia as entradas para um arquivo.

Quando executo o arquivo .exp diretamente ou através de "esperar FILENAME", ou mesmo quando uso o autoexpecto, recebo os erros abaixo que sugerem que ele não foi interpretado corretamente (arquivo .exp esperado?). O que devo fazer para obter o Expect com um script bash funcionando?

  • Estou testando usando o Ubuntu através do WSL como o SO e o CMD (o bash é executado para usar o WSL e os comandos normais do bash utilizáveis, 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"

Saída:

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
    
por Damien Golding 17.07.2018 / 08:30

1 resposta

5

Você tem um final de linha DOS (CRLF) no script bash , test-interactive.sh . Isso é mais provável porque você desenvolveu esse script em um editor no Windows que, por padrão, finaliza as linhas com \r\n em vez das \n finais nas máquinas * nix. Assim, quando o script é executado, ele engasga com o \r extra que você vê abaixo. Limpe seu script antes de executar, fazendo

dos2unix test-interactive.sh
    
por 17.07.2018 / 08:33

Tags