PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Perl - Seltsamer Fehler



klinsel
21-01-2008, 16:30
Ich habe in meinem Perlscript eine Zeile


$ergebnis =`grep -i "$eingabe" bilder.txt`;

Es wird also eine Substitution (``) verwendet.

Wenn ich nun z.B. in $eingabe


" bilder.txt ; ./ls & ; echo "test

eingebe, erhalte ich immer den Fehler


sh: Syntax error: ";" unexpected

Es liegt an dem ";" nach dem "&".


Führe ich allerdings auf der shell


sh -c grep -i "" bilder.txt ; ./ls & ; echo "test" bilder.txt

manuell aus, funktioniert alles! Und genau diese Zeile führt ja Perl auch aus...


Kann mir das bitte jemand erklären?

rais
22-01-2008, 01:08
Moin moin,
ich hab von Perl zugegebenermaßen keine Ahnung, aber die beschriebene Fehlermeldung



sh: Syntax error: ";" unexpected
bekomme ich auch bei



sh -c grep -i "" bilder.txt ; ./ls & ; echo "test" bilder.txt

d. h. wenn ich ``bilder.txt'' durch eine bei mir vorhandene Datei ersetze.
Vielleicht hat es ja damit zu tun, daß Du versuchst, ./ls aufzurufen? Zumindest auf meinem System gibt es keinen `ls' im aktuellem Verzeichnis, so ich mich nicht gerade in /bin aufhalte...
MfG,

jan61
23-01-2008, 23:05
Moin,


... Vielleicht hat es ja damit zu tun, daß Du versuchst, ./ls aufzurufen? Zumindest auf meinem System gibt es keinen `ls' im aktuellem Verzeichnis, so ich mich nicht gerade in /bin aufhalte...
MfG,

Nö, dann würde "./ls: file or command not found" kommen. Der gleiche Fehler passiert auch, wenn Du ./ls durch ls ersetzt.

@klinsel: Auch bei mir führt das immer zu einem Syntax-Error, auch wenn ich das so wie Du in der Shell absetze. Das erscheint auch logisch - siehe man bash:
Lists
A list is a sequence of one or more pipelines separated by one of the operators ;, &,
&&, or ||, and optionally terminated by one of ;, &, or <newline>.Ein & IST also schon der Trenner, das Semikolon danach ist zuviel. Lesen bildet (auch mich, ich habe meinen Irrtum erst jetzt gesehen) ;-) So würde es also gehen:
grep -i "" bilder.txt ; ./ls & echo "test" bilder.txtNebenbei: Der Befehl
sh -c grep -i "" bilder.txt ; ./ls & ; echo "test" bilder.txtist mitnichten der, den das Perl-Script ausführt. Das würde eher durch
sh -c 'grep -i "" bilder.txt ; ./ls & ; echo "test" bilder.txt'erreicht werden - aber auch das gibt den Fehler - aus den o. g. Gründen.

Ach ja: Was zum Geier willst Du denn mit dieser abenteuerlichen Konstruktion erreichen???

Jan