cygwin bash: si la declaración no funciona

cygwin bash: si la declaración no funciona

Soy nuevo en las secuencias de comandos bash y estoy intentando aprender en Windows, así que descargué cygwin. Usando Windows 10, cygwin v2.5.1

Me aseguré de instalar el paquete bash (lo hice), y comencé a leer algunos tutoriales, pero cuando llegué a if...filas declaraciones, dejó de funcionar. Aquí está mi código:

#!/usr/bin/env bash
#
echo 'Hello'
#
if [ 1 -eq 1 ]
then
  echo 'Success'
fi
echo 'Hello Again'

La salida es

>./test.sh
Hello
./test.sh: line 10: syntax error: unexpected end of file

No puedo ni por mi vida descubrir qué está yendo mal. Copié y pegué declaraciones if y probé diferentes tipos de expresiones, pero no parece registrarlas en ifabsoluto.

¿Quizás configuré mal cygwin?

Respuesta1

Bueno... me siento tonto. Pero responderé esta pregunta para cualquiera que tenga el mismo problema.

Como estoy desarrollando en una computadora con Windows, uso finales de línea CRLF. Utilizo Sublime Text y nunca pienso en finales de línea porque siempre estoy desarrollando para Windows.

Pero, por supuesto, los scripts bash necesitan usar finales de línea LF, o suceden cosas raras. No podría decir por qué permite que echose ejecuten comandos y no if...fi, pero cuando cambié los finales de línea a LF, todo funcionó como era de esperar.

Respuesta2

A mí me funciona, pero si cambio la terminación de línea al estilo DOS (terminación de línea 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

así que convierta su script al estilo Unix (LF como final de línea)

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

información relacionada