Beefy Boxes and Bandwidth Generously Provided by pair Networks
No such thing as a small change
 
PerlMonks  

Re: How to execute commands in the same shell as Perl script

by chrestomanci (Priest)
on Sep 13, 2011 at 13:11 UTC ( #925696=note: print w/ replies, xml ) Need Help??


in reply to How to execute commands in the same shell as Perl script

I think bhagperl might be attempting to write a perl script that alters his environment similar to the very common bash idiom of sourcing a script such as:

[username@localhost]$ . ./set_envs.sh

If you attempt something like that with a perl script it does not work because perl runs in a child process of the current shell, and any changes it makes to it's environment don't affect the calling process (the user's shell).

The solution (under unix) is to use eval and backticks and have perl emit the commands to change the environment to stdout. eg:

[username@localhost]$ eval `perl set_envs.pl`

Where the perl script is something like:

if( $ENV{'SHELL'} =~ m:/bash$: ) { printf 'export ENVAR=%s\n', $value; ... } elsif ( $ENV{'SHELL'} =~ m:/csh$: ) ...


Comment on Re: How to execute commands in the same shell as Perl script
Select or Download Code
Re^2: How to execute commands in the same shell as Perl script
by bhagperl (Novice) on Sep 16, 2011 at 09:12 UTC

    Hi All,

    Thanks for all those interpretations and series of analysis of what i meant :) Sorry folks i was not clear then.

    There are 2 Answers that i seek:

    1) Actually what i meant is, does a child process in PERL has access to Parent process's env variables.

    2) Can Child process change parent process's environment settings in PERL ?

    I want a child process to run some commands and then change parent process's env settings. Is this possible in PERL ?

    Please let me know if there is solution for this.

    Thanks !

    -bhag
      does a child process in PERL has access to Parent process's env variables

      Sigh. There ain't no PERL. The language is named Perl, and the executable that reads it is named perl.

      No, a child process can not access the environment of the parent, at least not in a portable way (i.e. without playing dirty tricks). Most of the times, the child process inherits a COPY of the environment, but in special cases, the childs environment may be manipulated by the parent befor e starting the child.

      Can Child process change parent process's environment settings in PERL ?

      No. This is the same question as before. Allowing that would be dangerous.

      I want a child process to run some commands and then change parent process's env settings.

      Make perl emit a shell script that can be sourced by the parent shell (after perl has exited) to change its environment. Or even better: Run the entire job from within Perl, so you don't have to mess with any shells.

      Alexander

      --
      Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so". ;-)

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://925696]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others pondering the Monastery: (6)
As of 2014-09-20 07:00 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    How do you remember the number of days in each month?











    Results (155 votes), past polls