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

0

Eu sou novo no bash scripting, e estou tentando aprender no Windows, então baixei o cygwin. Usando o Windows 10, cygwin v2.5.1

Eu me certifiquei de instalar o pacote bash (eu fiz), e então comecei a fazer alguns tutoriais, mas quando cheguei a if...fi , ele parou de funcionar. Aqui está o 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 posso para a vida de mim descobrir o que está errado. Eu copiei / colei instruções if e tentei diferentes tipos de expressões, mas parece não registrar o if .

Talvez eu tenha configurado o cygwin errado?

    
por Cappielung 22.06.2016 / 00:44

2 respostas

0

Bem ... eu me sinto idiota. Mas vou responder a esta pergunta para qualquer outra pessoa que tenha o mesmo problema.

Desde que eu estou desenvolvendo em um computador Windows, ele está usando finais de linha CRLF. Eu uso o Sublime Text e nunca penso em finais de linha porque estou sempre desenvolvendo para o Windows.

Mas, é claro, os scripts bash precisam usar finais de linha LF, ou coisas estranhas acontecem. Eu não poderia dizer por que isso permite que echo de comandos sejam executados e não if...fi , mas quando eu mudei meus finais de linha para LF, tudo funcionou como você esperaria.

    
por 22.06.2016 / 01:08
0

Funciona para mim, mas se eu mudar 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 em unix style (LF como line end)

$ d2u ./prova.sh
dos2unix: converting file ./prova.sh to Unix format...
$ ./prova.sh
Hello
Success
Hello Again
    
por 22.06.2016 / 17:58

Tags