http://www.perlmonks.org?node_id=1038572


in reply to Re^2: How to "source" a shell file in Perl?
in thread How to "source" a shell file in Perl?

Congratulations, works for me :)

open my $source,'-|',"bash /tmp/wrapper.sh" or die "$!"; my $dump= do { local $/; <$source>}; my $VAR1; eval $dump; print $VAR1->{MONK}; #> jfroebe

lanx@nc10-ubuntu:/tmp$ cat wrapper.sh . /tmp/src.sh perl -MData::Dumper -e' print Dumper \%ENV' lanx@nc10-ubuntu:/tmp$ cat src.sh export MONK=jfroebe lanx@nc10-ubuntu:/tmp$

Thats an extremely stable approach, I can't think of a way to make it break! =)

you could even try to generate the code from wrapper.sh dynamically on the fly, hence avoiding any security/dependencies issues.

Cheers Rolf

( addicted to the Perl Programming Language)

UPDATE

> you could even try to generate the code from wrapper.sh dynamically on the fly

works! =)

my $bashcode=<<'_bash_'; . /tmp/src.sh; perl -MData::Dumper -e "print Dumper \%ENV"; _bash_ open my $source, '-|', qq{bash -c '$bashcode'} or die "$!"; my $dump= do { local $/; <$source>}; my $VAR1; eval $dump; print $VAR1->{MONK}; #> jfroebe

UPDATE

far less code, same result

my $bashcode=<<'__bash__'; . /tmp/src.sh; perl -MData::Dumper -e 'print Dumper \%ENV'; __bash__ my $VAR1; eval qx{bash -c "$bashcode"}; print $VAR1->{MONK}; #> jfroebe