http://qs321.pair.com?node_id=99863


in reply to Can you import ENV variables at run time?

The problem is that users don't have environment variables, processes do. What you sees in your environment variables when logged into an interactive shell is the result of that shell running some shell scripts (like .profile, .bashrc, /etc/profile, etc., depending on the shell).

There are a few you could guess at from the contents of the passwd file: home directory, initial shell; but past this it's going to be hard to guess what the environment variable would have been.

If you run your scripts using the shell (after setting $HOME, $USER, etc.) you may be able to get the shell to interpret these files. For instance, under bash you can do this:

system("/bin/bash --login -c $yourScript");
and get the environment variables set.

update: I realize that not everyone has the same shell; you'd want to use getpwuid to get the passwd file setting for login shell and HOME. tilly's suggestion sounds good.

Replies are listed 'Best First'.
Re: Re: Can you import ENV variables at run time?
by nardo (Friar) on Jul 26, 2001 at 04:40 UTC
    /bin/bash isn't necessarily everyone's shell and thus any environment variables they set up upon login won't necessarily be set by bash.
    $command = sprintf('exec - %s -c env', (getpwuid($>))[8]); $ENV{'HOME'} = (getpwuid($>))[7]; $env = `$command`;
    This should run someone's shell as a login shell regardless of what shell it is, and $env will contain the output of env which should be easy to parse.