X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2Fdotsh.pl;h=810ebc4d605410f92f67e63e963b9f651904fd93;hb=b9ad30b40cf004f5ea6fd7a945a950cf873aed7b;hp=5be2413ae621e4fbdb09531dd523f582a164de62;hpb=a6d7165678aed89f828954d0fcb2e714844ad7d6;p=p5sagit%2Fp5-mst-13.2.git diff --git a/lib/dotsh.pl b/lib/dotsh.pl index 5be2413..810ebc4 100644 --- a/lib/dotsh.pl +++ b/lib/dotsh.pl @@ -27,9 +27,9 @@ # dependent upon. These variables MUST be defined using shell syntax. # # Example: -# &dotsh ('/tmp/foo', 'arg1'); -# &dotsh ('/tmp/foo'); -# &dotsh ('/tmp/foo arg1 ... argN'); +# &dotsh ('/foo/bar', 'arg1'); +# &dotsh ('/foo/bar'); +# &dotsh ('/foo/bar arg1 ... argN'); # sub dotsh { local(@sh) = @_; @@ -54,19 +54,17 @@ sub dotsh { } } if (length($vars) > 0) { - system "$shell \"$vars;. $command $args; set > /tmp/_sh_env$$\""; + open (_SH_ENV, "$shell \"$vars && . $command $args && set \" |") || die; } else { - system "$shell \". $command $args; set > /tmp/_sh_env$$\""; + open (_SH_ENV, "$shell \". $command $args && set \" |") || die; } - open (_SH_ENV, "/tmp/_sh_env$$") || die "Could not open /tmp/_sh_env$$!\n"; while (<_SH_ENV>) { chop; m/^([^=]*)=(.*)/s; $ENV{$1} = $2; } close (_SH_ENV); - system "rm -f /tmp/_sh_env$$"; foreach $key (keys(%ENV)) { $tmp .= "\$$key = \$ENV{'$key'};" if $key =~ /^[A-Za-z]\w*$/;