Ich habe ein Bash-Skript, das derzeit mehr als 700 Zeilen lang ist. Nach einer besonders langen Bearbeitungsrunde gibt es nun folgende Fehler:
./run_me.sh: line 693: unexpected EOF while looking for matching `''
./run_me.sh: line 702: syntax error: unexpected end of file
Es gibt jedoch nichts Falsches, was ich an Zeile 693 sehen kann. Es gibt nicht einmal ein Zitat darauf.
Ich habe versucht zu laufen bash -x run_me.sh
und kann sehen, dass die letzte Zeile ausgeführt wird, aber auch an dieser Zeile ist nichts auszusetzen (und der Code zwischen dieser Zeile und 693 ist praktisch der größte Teil des Codes).
Ich kann ganze Teile des Codes auskommentieren, aber dann sehe ich eher Fehler aufgrund fehlender Funktionen usw. als den EOF-Fehler, den ich erhalte.
Wie soll jemand das fehlende Zitat finden, wenn die Zeilennummer falsch gemeldet wird?
(Warum ist die Zeilennummer von bash überhaupt so weit entfernt?)
Bearbeiten
Übrigens habe ich meinen speziellen Fehler gefunden (durch Kommentieren von Schwaden), der tatsächlich }
in einer variablen Erweiterung bei einer beliebigen Zeilennummer fehlte, die nicht in der Nähe der durch die Fehlermeldung angegebenen Zeile liegt - zitierbasierte Syntaxhervorhebung hat hier nicht geholfen, z die fehlende Klammer in "${MY_ARRAY[@]"
(sollte sein "${MY_ARRAY[@]}"
).
-nv
Ding ausprobiert haben, bekommen Sie vielleicht eine bessere Idee - die Eingabeaufforderungen werden Sie darauf $PS2
hinweisen . Sie werden es bekommen, wenn die Shell irgendwann begonnen hat, ein Zitat oder eine zusammengesetzte Ebene zu interpretieren und es nicht geschafft hat Schließen Sie dieses Token, seit die letzte Zeile in der Eingabe aufgetreten ist. Versuchen Sie auch: PS4='LAST EXECLINE: $((LAST+!(LAST=LINENO)))'; set -x
weil die Leinen in Unterschalen manchmal ziemlich lustig werden können.
sh -nv <script
wie du. Sobald sich Ihre Fehlermeldung ändert, haben Sie den zusammengesetzten Befehl gefunden, in dem Ihr Problem liegt. Und die Zeilennummern sind in Ordnung - jede Funktion bekommt ihre eigene.