Ich bin neu im Bash-Scripting und versuche, es unter Windows zu lernen, also habe ich Cygwin heruntergeladen. Unter Windows 10 ist Cygwin v2.5.1
Ich habe sichergestellt, dass ich das Bash-Paket installiert habe (was ich getan habe), und habe dann angefangen, einige Tutorials durchzugehen, aber als ich zu if...fi
den Anweisungen kam, funktionierte es nicht mehr. Hier ist mein Code:
#!/usr/bin/env bash
#
echo 'Hello'
#
if [ 1 -eq 1 ]
then
echo 'Success'
fi
echo 'Hello Again'
Die Ausgabe ist
>./test.sh
Hello
./test.sh: line 10: syntax error: unexpected end of file
Ich kann beim besten Willen nicht herausfinden, was da schief läuft. Ich habe if-Anweisungen kopiert/eingefügt und verschiedene Arten von Ausdrücken ausprobiert, aber es scheint if
überhaupt nichts zu registrieren.
Vielleicht habe ich Cygwin falsch konfiguriert?
Antwort1
Nun ja, ich fühle mich dumm. Aber ich beantworte diese Frage für alle anderen, die das gleiche Problem haben.
Da ich auf einem Windows-Computer entwickle, werden CRLF-Zeilenenden verwendet. Ich verwende Sublime Text und denke nie über Zeilenenden nach, da ich immer für Windows entwickle.
Aber natürlich müssen Bash-Skripte LF-Zeilenenden verwenden, sonst passieren komische Dinge. Ich konnte nicht sagen, warum echo
Befehle ausgeführt werden können und nicht if...fi
, aber als ich meine Zeilenenden auf LF umgestellt habe, funktionierte alles wie erwartet.
Antwort2
Bei mir funktioniert es, aber wenn ich den Zeilenabschluss auf DOS ändere (CR/LF-Zeilenabschluss)
$ u2d ./prova.sh
unix2dos: converting file ./prova.sh to DOS format...
$ ./prova.sh
Hello
./prova.sh: line 10: syntax error: unexpected end of file
also konvertieren Sie Ihr Skript in den Unix-Stil (LF als Zeilenende)
$ d2u ./prova.sh
dos2unix: converting file ./prova.sh to Unix format...
$ ./prova.sh
Hello
Success
Hello Again