in reply to Re^3: Access system ENV variables from within CGI Script
in thread Access system ENV variables from within CGI Script

I notice the function calls `echo env |...`, when I do echo env from the command line I get nothing, env by iteself works. An example of a line from the .profile is: TESTUSERS="test@unix.company.com"; export TESTUSERS. This is one of the variables that tillys method does not pick up. Thanks again for your help
  • Comment on Re^4: Access system ENV variables from within CGI Script

Replies are listed 'Best First'.
Re^5: Access system ENV variables from within CGI Script
by Corion (Patriarch) on Oct 12, 2007 at 12:41 UTC
      here is my test code:
      #!/opt/appenv/perl/bin/perl use strict; use warnings; use CGI; use Data::Dumper; my $q = new CGI; print $q->header(); my %ENV2; %ENV2 = (%ENV2, get_login_env()); print Dumper(\%ENV2); sub get_login_env { local %ENV; my $shell= '/usr/bin/ksh'; #shift || (getpwuid($<))[8]; my $env = `echo env | /opt/appenv/perl/bin/perl -e 'exec {"$shell"} +-sh'`; if (wantarray) { my @pieces = ($env =~ m/^(.*?)=((?:[^\n\\]|\\.|\\\n)*)/gm); s/\\(.)/$1/g foreach @pieces; return @pieces; } else { return $env; } }
      The only things I have changed from Tillys example is the $shell, since the value it was coming up with was /bin/ksh and not /usr/bin/ksh (since which ksh returns /usr/bin/ksh). And the path to Perl on the machine /opt/appenv/perl/bin/perl. I am starting to follow your comments about an instance of /usr/bin/ksh calling echo env, but I am curious as to why we are only getting few results via the above method. Any advice on how to begin some debugging would help lots. TIA

        You will need to look at what actually happens. What the output of `env` is, also the error output. And of course, also what happens in your login/profile scripts. Most likely one of the scripts is not run when no terminal is connected. Adding set -x to the top of all interesting shell scripts will provide lots of informative output of what gets run when. Also, manually logging in as a different user, preferrably with an empty environment, and then running the scripts of your user might prove helpful.