X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2Fdotsh.pl;h=810ebc4d605410f92f67e63e963b9f651904fd93;hb=d07a55edad6afd25dba740156f34d6ba180fc2b2;hp=8e9d9620e59cf982ad2a3559f02bd61299d5a9dd;hpb=4633a7c4bad06b471d9310620b7fe8ddd158cccd;p=p5sagit%2Fp5-mst-13.2.git diff --git a/lib/dotsh.pl b/lib/dotsh.pl index 8e9d962..810ebc4 100644 --- a/lib/dotsh.pl +++ b/lib/dotsh.pl @@ -1,6 +1,13 @@ # # @(#)dotsh.pl 03/19/94 # +# This library is no longer being maintained, and is included for backward +# compatibility with Perl 4 programs which may require it. +# +# In particular, this should not be used as an example of modern Perl +# programming techniques. +# +# # Author: Charles Collins # # Description: @@ -20,13 +27,15 @@ # 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) = @_; - local($tmp,$key,$shell,*dotsh,$command,$args,$vars) = ''; + local($tmp,$key,$shell,$command,$args,$vars) = ''; + local(*dotsh); + undef *dotsh; $dotsh = shift(@sh); @dotsh = split (/\s/, $dotsh); $command = shift (@dotsh); @@ -37,7 +46,7 @@ sub dotsh { $shell = "$1 -c" if ($_ =~ /^\#\!\s*(\S+(\/sh|\/ksh|\/zsh|\/csh))\s*$/); close (_SH_ENV); if (!$shell) { - if ($ENV{'SHELL'} =~ /\/sh$|\/ksh$|\/zsh$|\/csh$/) { + if ($ENV{'SHELL'} =~ /\/sh$|\/ksh$|\/zsh$|\/bash$|\/csh$/) { $shell = "$ENV{'SHELL'} -c"; } else { print "SHELL not recognized!\nUsing /bin/sh...\n"; @@ -45,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; - /=/; - $ENV{$`} = $'; + 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*$/;