cygwin bash - se a instrução não funcionar

cygwin bash - se a instrução não funcionar

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 echoa 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

informação relacionada