/ 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
Ændring af enviroment-variable fra perl-sc~
Fra : Lau Sennels


Dato : 04-02-01 16:52

I et perl-script henter jeg parametre om forskellige filer med -X. jeg
har så brug for at sammenligne parametrene med tilsvarende værdier fra
en tidligere udførsel af scriptet. Så vidt jeg kan se er det mest
elegante at gemme parametrene i enviroment-variable mellem hver
udførsel. Til det formål har jeg oprettet env-variable i .bashrc, og
læser så ind fra dem med %ENV. Indlæsning fungerer. Problemet er at jeg
ikke kan tildele env-variablerne de nye parameterværdier. Værdierne af
env-variablerne ænderes ikke.
Jeg bruger f.eks.

$ENV{'FileName'}=$File, hvor FileName er en env-variabel.

Problemet er formentlig at den nye værdi først er tilgængelig for
child-processer af scriptet. Det duer ikke ikke til mit formål.
Naturligvis kunne jeg lægge værdierne i en fil, men det er hverken
særligt elegant eller hensigtsmæssigt. Er der nogen der har en idé til
hvordan problemet kan løses?

--
Mvh
Lau Sennels

 
 
Regnar Bang Lyngsø (04-02-2001)
Kommentar
Fra : Regnar Bang Lyngsø


Dato : 04-02-01 18:00

Hejsa

Lau Sennels wrote:

> Jeg bruger f.eks.
>
> $ENV{'FileName'}=$File, hvor FileName er en env-variabel.
>
> Problemet er formentlig at den nye værdi først er tilgængelig for
> child-processer af scriptet. Det duer ikke ikke til mit formål.
> Naturligvis kunne jeg lægge værdierne i en fil, men det er hverken
> særligt elegant eller hensigtsmæssigt.

Deri er jeg generelt uenig. Jeg vil hellere have en stabel .foo-filer
liggende, men fred nu være med det.

> Er der nogen der har en idé til
> hvordan problemet kan løses?

Perlfaq8:

I {changed directory, modified my environment} in a perl script. How
come the change disappeared when I exited the
script? How do I get my changes to be visible?

Unix
In the strictest sense, it can't be done -- the script
executes as a different process from the shell it was
started from. Changes to a process are not reflected in
its parent, only in its own children created after the
change. There is shell magic that may allow you to fake
it by eval()ing the script's output in your shell; check out
the comp.unix.questions FAQ for details.

Så svaret må være:

eval `perlscript`

fra din shell. Dit script skal så blot skrive de rette linier ud ved
hjælp af print.

Knus
   Regnar
--
Regnar Bang Lyngsø (regnar@writeme.com, regnar@beer.com)
<URL:http://www.daimi.au.dk/%7Erblyngso/>

Lau Sennels (05-02-2001)
Kommentar
Fra : Lau Sennels


Dato : 05-02-01 18:22

Regnar Bang Lyngsø wrote:

> > Problemet er formentlig at den nye værdi først er tilgængelig for
> > child-processer af scriptet. Det duer ikke ikke til mit formål.
> > Naturligvis kunne jeg lægge værdierne i en fil, men det er hverken
> > særligt elegant eller hensigtsmæssigt.
>
> Deri er jeg generelt uenig. Jeg vil hellere have en stabel >.foo-filer liggende, men fred nu være med det.

Det kan jeg godt følge dig i, men her er afviklingstiden kritisk.

> Perlfaq8:

Hmm. Det overså jeg.

>
> Så svaret må være:
>
> eval `perlscript`
>
> fra din shell. Dit script skal så blot skrive de rette linier ud ved
> hjælp af print.

Ja, det virker. Men under de givne omstændigheder ikke bedre end .foo.
Tak for hjælpen.

--
Mvh
Lau Sennels

Søg
Reklame
Statistik
Spørgsmål : 177547
Tips : 31968
Nyheder : 719565
Indlæg : 6408797
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste