Sou novo em scripts bash e estou tentando aprender no Windows, então baixei o cygwin. Usando o Windows 10, cygwin v2.5.1
Certifiquei-me de instalar o pacote bash (instalei) e comecei a passar por alguns tutoriais, mas quando cheguei if...fi
às instruções, ele parou de funcionar. Aqui está meu código:
#!/usr/bin/env bash
#
echo 'Hello'
#
if [ 1 -eq 1 ]
then
echo 'Success'
fi
echo 'Hello Again'
A saída é
>./test.sh
Hello
./test.sh: line 10: syntax error: unexpected end of file
Eu não consigo descobrir o que está errado. Copiei/colei instruções if e tentei diferentes tipos de expressões, mas parece que não registra nada if
.
Talvez eu tenha configurado o cygwin errado?
Responder1
Bem... eu me sinto idiota. Mas responderei a essa pergunta para qualquer outra pessoa que tenha o mesmo problema.
Como estou desenvolvendo em um computador Windows, ele usa terminações de linha CRLF. Eu uso Sublime Text e nunca penso em finais de linha porque estou sempre desenvolvendo para Windows.
Mas, é claro, os scripts bash precisam usar finais de linha LF, ou então coisas estranhas acontecem. Eu não sabia dizer por que ele permite echo
a execução de comandos e não if...fi
, mas quando mudei meus finais de linha para LF, tudo funcionou como esperado.
Responder2
Funciona para mim, mas se eu alterar a terminação de linha para o estilo DOS (terminação de linha CR/LF)
$ u2d ./prova.sh
unix2dos: converting file ./prova.sh to DOS format...
$ ./prova.sh
Hello
./prova.sh: line 10: syntax error: unexpected end of file
então converta seu script para estilo unix (LF como final de linha)
$ d2u ./prova.sh
dos2unix: converting file ./prova.sh to Unix format...
$ ./prova.sh
Hello
Success
Hello Again