Konflikt mit Perl

heuri

heuri

Jungspund
Hallo erstmal,
ich habe ein Problem bezüglich Perl mit Shell.
Ich will mit perl einen Shell Code ausführen mit system();
Leider kommt folgender Konflikt:
Ich will eine Schleife ausführen:

for i in $(find blablabla......

anstatt aus i die Variable > $i zu machen ist unter Perl $( eine System Variable und macht daraus den EGID > Effective Group ID < also:

for i in $(find blablabla...... > for i in 1001 1001find blablabla......

Wie kann ich das umgehen?
Gibt es eine alternative zu den $(????

Vielen Dank!
 
Probier mal den qx-operator (= quote and execute).

Code:
perldoc -f qx

in der Konsole.
 
Erstmal danke,
leider kommt beim durchlauf mit

qx() der gleiche fehler > mit dem **** EGID
bei qw() macht er garnix im shellbefehl

Gibt es sonst noch alternativen?
DANKE! :hilfe2: :hilfe2:
 
Einfach escapen, und gut ist.
"for i in \$(find blablabla......"
 
heuri schrieb:
So ist i keine Variable mehr ;(
Ich weiss zwar nicht genau, wie du das benutz, aber wenn du einfach "i" hinschreibst wird es auch nie eine Variable werden.
Wenn du i als Perl-Variable benutzt musst du "$i" schreiben,
und wenn du es als Shell-Variable benutzen willst muss du "\$i" schreiben.
Wo liegt dabei also das Problem?
 
Also ich benutze es so:
for file in $(find -type f)
do
echo"Datei $file"
........

somit ist file dann die variable $file zumindest wenn ich nur den shell teil in einer .sh ausführe
 
Eben, es soll als Shellvariable interpretiert werden und nicht als Perlvariable. Und genau dies ist Fall, wenn Du Mµ*e^13.5_?¿s Lösung mit dem Escapen nutzt. Alternativ kannst Du Deinen system-String in '...' einschliessen.

Kleines Anschauungsbeispiel:

Code:
[~]$ perl -e 'system "a=123; echo \$a"'
123

Gruss, Xanti
 

Ähnliche Themen

iptables Konfigurationsdatei

nach ssh-login auswerte ob passwortabfrage komt oder nicht

Samba 4 Gast Zugang unter Ubuntu funktioniert nicht

Fedora 20 - Unlösbare Paket-Duplikat Konflikte

Perl in der Shell: 2x Suchen und 1x Ersetzen

Zurück
Oben