#!/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 |