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...fi
las 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 if
absoluto.
¿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 echo
se 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