Como indicado pelas seqüências ^M
na sua saída cat -net
, você salvou o script com finais de linha no estilo Windows (CRLF) em vez de no estilo Unix (somente LF)
Na verdade, poderíamos ter adivinhado que, a partir da mensagem de erro truncada: o erro "real" é que pipefail\r
é um nome de opção inválido. No entanto, o retorno de carro faz com que o cursor seja redefinido para o início da linha e sobrescreva os caracteres anteriores. Comparar
$ cat -net bad.sh
1 #!/bin/bash$
2 set -eo fhqwhgads$
$ ./bad.sh
./bad.sh: line 2: set: fhqwhgads: invalid option name
e
$ cat -net bad.sh
1 #!/bin/bash$
2 set -eo pipefail^M$
$ ./bad.sh
: invalid option name: pipefail