zsh Problem mit Klammern

wegus

MU Team
Thread Starter
Dabei seit
13.09.2004
Beiträge
19.699
Reaktionspunkte
7.553
Kennt sich jemand zufällig gut mit ZSH aus und kann hierzu etwas sagen:

Ich hatte bei der Entwicklung einer Java App und deren Test in der Shell ein merkwürdiges Verhalten:

Mein jar File startet sich vereinfacht so:

Code:
../path/to/java -jar meineApp.jar -u=user -p=12345() -l=/path/to/logfile

Das hier Passwörter auf der Shell übergeben werden ist nur temporär - mir ist bewußt, dass man das so nicht läßt!
Was mir nicht bewußt war, ich darf die runden Klammern so direkt nicht verwenden. Wenn Klammern im String sind, muß ich den quoten.
Daran hatte ich nicht gedacht. Und tatsächlich, wenn ich die Zeile so in einer bash eingebe bekomme ich die klare Fehlermeldung, dass das Zeichen '(' dort so nicht erlaubt sei.

Bei der ZSH passiert Merkwürdiges:
Es gibt keinen Fehler! Dafür wird aber eben auch erst gar nichts ausgeführt. Jeder weitere Start in der Shell führt zur der Fehlermeldung das '-l=/path/to/logfile' nicht existiere (was auch noch falsch ist inhaltlich). Starte ich dann irgendwann nur noch das java command mit '../path/to/java' so bekomme ich dies mit '-l=/path/to/logfile' geprompted. Auch wenn ich an java die Befehle --version z.B. anhänge. Das heißt der Befehl selbst ist gar nicht mehr nutzbar. Ich muß die ZSH schließen und eine Neue öffnen.

Ich kann mir nicht ganz erklären was da im Hintergrund eigentlich passiert und ob das ein Bug oder ein Feature ist. Vielleicht ist ein ZSH Profi zufällig hier und hat eine Idee was da passiert? Mich würde das interessieren!
 
... ohne das jetzt genau zu analysieren, würde ich vermuten, dass zsh das 12345() als Funktionsdeklaration interpretiert und den gesamten Teil vorher, zumindest das ../path/to/java, als Variable ansieht, der die Funktion 12345() zugewiesen wird. Das darauf folgende -l=.... ist dann der Funktionsinhalt.

Das könnte dann erklären, dass ../path/to/java den Funktionsinhalt liefert und eben das '-l=/path/to/logfile' ausgibt.
 
  • Gefällt mir
Reaktionen: wegus
() wird auch benutzt um eine sub Shell zu starten.
Probier doch mal nur () und guck was passiert.

über zsh parenthesis findet man Beispiele wie die Klammern in zsh verwendet werden.
 
  • Gefällt mir
Reaktionen: wegus
Danke Euch, das bringt Licht in die Sache. Das mit der 'Sub-Shell' erklärt, warum es keine Fehlermeldung gibt, wie ich es erwartet hätte. Werde mich damit mal beschäftigen, das klingt spannend.
 
Zurück
Oben Unten