| #!/usr/bin/perl |
| |
| my %opts; |
| my @args; |
| { |
| my $opts = 1; |
| foreach (@ARGV) { |
| if ($opts) { |
| $opts = 0 if /^--$/; |
| $opts{$1} = $2 if /^-([a-zA-Z])(.+)$/; |
| } else { |
| push (@args, $_); |
| } |
| } |
| } |
| |
| my $mode = $opts{'M'}; |
| if ($mode eq 'redirect') { |
| my $stdout = $opts{'o'} || die "No -o"; |
| my $stderr = $opts{'O'} || die "No -O"; |
| open (STDOUT, ">$stdout") || die "Could not redirect STDOUT to $stdout: $!"; |
| open (STDERR, ">$stderr") || die "Could not redirect STDERR to $stderr: $!"; |
| |
| select STDERR; $| = 1; |
| select STDOUT; $| = 1; |
| |
| exec { $args[0] } @args; |
| die "Could not exec " . join(' ', @args) . ": $!"; |
| } |
| else { |
| die "Unknown mode: $mode\n"; |
| } |