The code below runs in combination with the Korn shell, and probably any other Bourne shell decendent, including the POSIX shell. I don't know whether this works in the standard Windows shell - probably not due to quoting issues.
Abigail
my $ENVIRONMENT = "/some/file/with/environment/variables/"; if (@ARGV && $ARGV [0] eq '--sourced_environment') { shift; } else { if (-f $ENVIRONMENT) { # # Now we perform a double exec. The first exec gives us a +shell, # allowing us the source the file with the environment var +iables. # Then, from within the shell we re-exec ourself - but wit +h an # argument that will prevent us from going into infinite r +ecursion. # # We cannot do a 'system "source $ENVIRONMENT"', because # environment variables are not propagated to the parent. # # Note the required trickery to do the appropriate shell q +uoting # when passing @ARGV back to ourselves. # # Also note that the program shouldn't normally be called +with # '--sourced_environment' - if so, pick something else. # @ARGV = map {s/'/'"'"'/g; "'$_'"} @ARGV; exec << " --"; source '$ENVIRONMENT' exec $0 --sourced_environment @ARGV; -- die "This should never happen."; } }
|
---|