• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[gelöst]Kommando als String an Perl übergeben

utopos

Member
Hallo zusammen,


in der bash versuche ich gerade, perl-Einzeiler von der Kommandozeile aus derart aufzurufen, dass der Einzeiler in einer Variable gespeichert ist.

Minimal-Beispiel mit originaler Fehlermeldung:

Code:
michael@kohlhasenbrueck>PerlComm="'print \"Hallo\!\"'"
michael@kohlhasenbrueck>echo $PerlComm
'print "Hallo\!"'
michael@kohlhasenbrueck>perl -e $PerlComm
Can't find string terminator "'" anywhere before EOF at -e line 1.

Anmerkungen:

  • Obiges und verwandte Befehle habe ich sowohl direkt von der Kommandozeile als auch in einem Skript (wo es eigentlich hin soll) mit gleichem Ergebnis ausprobiert.
  • Die Zeichenkette muss ich m.E. mit Anführungszeichen (") definieren. Hochkommata (') funktionieren nicht, da der String, wenn er im Perl-Aufruf ankommt, noch von Hochkommata umschlossen sein muss (sonst funktioniert es nicht, bereits ausprobiert). Die Variante '\' ... \'' funktioniert auch nicht.
    ERGÄNZUNG: Die Variante "\' ... \'" (also mit Escape-Zeichen vor den inneren Hochkommata) funktioniert auch nicht, offenbar ist das "Escapen" auch nicht nötig (s.o.).
  • Ich habe auch einige Varianten bzgl. der Anführungszeichen/Hochkommata und der Escape-Sequenzen ausprobiert, die auch nicht funktionieren (und die ich auch nicht plausibel gefunden hätte, aber hinterher ist man ja manchmal schlauer ;) ). Die oben aufgeführte Fassung ist die, die m.E. theoretisch funktionieren hätte müssen.
  • Das Ausrufungszeichen ist offenbar noch ein eigenes Problem, das hier aber nicht im Vordergrund steht.

Vielen Dank im Voraus für Eure hilfreichen Kommentare!



Noch abschließend, falls jemandem diese Frage jetzt auf der Zunge liegt: Wozu will ich das überhaupt?
Antwort: Inzwischen interessiert es mich auch unabhängig, weil es erlaubt, die Lesbarkeit des Skripts sehr zu erhöhen. Der Anlass aber war, dass das Perl-Kurzprogramm einen Wert enthalten soll, der in einer Shell-Variable gespeichert ist. In etwa so:

Code:
michael@kohlhasenbrueck>read str
xxx
michael@kohlhasenbrueck>perl -e 'while (<>) {if (/'${str}'/ {print "gefunden! - $_"; last}}' suchDatei

Aber wie gesagt, dies nur, falls Ihr Euch fragt, wieso ich den String vorher definieren möchte.
 

josef-wien

Ultimate Guru
Code:
PerlComm="print \"Hallo\!\n\""
perl -e "$PerlComm"
P. S. perl -e "'print \"Hallo\!\"'" gibt nichts aus.
 

abgdf

Guru
TMTOWTDI. Ich hatte mehr von Perl aus gedacht:
Code:
>PerlComm='print "Hallo!"'
>echo $PerlComm | perl -e 'eval while(<>)'
;)
 
OP
U

utopos

Member
Herzlichen Dank Euch zweien für die schnellen Antworten!

Auf die Variante mit

Code:
>perl -e "$perlComm"

war ich nicht gekommen, sehr elegant.
 
Oben