/ Forside / Teknologi / Udvikling / Perl / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Perl
#NavnPoint
bjarneA 141
poul_from 50
soccer 30
Nicknack 14
Tmpj 0
system
Fra : fix


Dato : 25-07-07 09:51

jeg har nærmest 0 erfaring i perl, men laver aperiodisk et script til at
hjælpe med et eller andet.
Til den ende sidder jeg og forsøger mig med systemkommandoen, som jeg gerne
vil bruge til at køre nogle bashscripts. Som jeg læser docs, burde en
bahslinie:
echo > tempfil kunne laves således:
#!/usr/bin/perl
@proglist = ("echo", ">","tempfil") ; ##/ har også prøvet med "\>"
system(@proglist);

men det virker således at begge parametrene echoes til console, og ikke som
pipe til filen. kan operatorer bare ikke være parametre? - eller hvad har
jeg ikke forstået?

finn



 
 
Peter Makholm (25-07-2007)
Kommentar
Fra : Peter Makholm


Dato : 25-07-07 09:59

"fix" <fix@faxe.dk> writes:

> #!/usr/bin/perl
> @proglist = ("echo", ">","tempfil") ; ##/ har også prøvet med "\>"
> system(@proglist);
>
> men det virker således at begge parametrene echoes til console, og ikke som
> pipe til filen. kan operatorer bare ikke være parametre? - eller hvad har
> jeg ikke forstået?

Når du i en shell kalder kommandoen 'echo foo > /tmp/somefile', så er
det shellen der ser '> /tmp/somefile' og gør så uddata bliver skrevet
til filen. Derefter bliver echo kaldt med det som shellen ikke vil
kendes ved.

I ovenstående perl-snippet bliver funktionen system kaldt med mere end
et argument, derfor starter perl programmet angivet i første argument
direkte uden at parse argumenterne i stil med en shell.

Hvis du vil have system() til at parse argumenterne ligesom en shel,
må du kun bruge et argument (fra pers synspunkt). Altså

system("echo > /tmp/somefile");

Det er fuldt ud dokumenteret i perls dokumentattion af
system-funktionen. Læs den med 'perldoc -f system'.

//Makholm



fix (25-07-2007)
Kommentar
Fra : fix


Dato : 25-07-07 10:57


"Peter Makholm" <peter@makholm.net> skrev i en meddelelse
news:87myxkoo42.fsf@hacking.dk...
> "fix" <fix@faxe.dk> writes:
>
>> #!/usr/bin/perl
>> @proglist = ("echo", ">","tempfil") ; ##/ har også prøvet med "\>"
>> system(@proglist);
>>
>> men det virker således at begge parametrene echoes til console, og ikke
>> som
>> pipe til filen. kan operatorer bare ikke være parametre? - eller hvad
>> har
>> jeg ikke forstået?
>
> Når du i en shell kalder kommandoen 'echo foo > /tmp/somefile', så er
> det shellen der ser '> /tmp/somefile' og gør så uddata bliver skrevet
> til filen. Derefter bliver echo kaldt med det som shellen ikke vil
> kendes ved.
>
> I ovenstående perl-snippet bliver funktionen system kaldt med mere end
> et argument, derfor starter perl programmet angivet i første argument
> direkte uden at parse argumenterne i stil med en shell.
>
> Hvis du vil have system() til at parse argumenterne ligesom en shel,
> må du kun bruge et argument (fra pers synspunkt). Altså
>
> system("echo > /tmp/somefile");
Tak!
næsten logik! når man altså forstår det
> Det er fuldt ud dokumenteret i perls dokumentattion af
> system-funktionen. Læs den med 'perldoc -f system'.

ja. - men det skal også "interpreteres" korrekt :>)

men tusind tak for hurtig og forståelig hjælp!



Søg
Reklame
Statistik
Spørgsmål : 177416
Tips : 31962
Nyheder : 719565
Indlæg : 6407859
Brugere : 218876

Månedens bedste
Årets bedste
Sidste års bedste