iam trying to create a program which will accept up to three commands pipe them and execute them. so far my program keeps crashing any help would be appreciated below is my program:
#!/usr/local/bin/perl -w
# perl script to pipe up to 3 commands together
$cmd=<STDIN>; #get input
chomp($cmd); #remove carriage return
@cmd=split(#,$cmd); #seperate commands by a #
$max=3; #set max size of array to 3
$max=@cmd; #assign size to array cmd
$max=$max-1; #let the array start at 0
for($x=1;$x<$max-1;$x++){ #go through each element of the array
if(fork==0)
{ #do the first command
for($n=1;$n<$max-1;$n++) #close all input pipes
close INPIPE[$n];
for($p=2;$p<$max-1$p++) #close all the output pipes
close OUTPIPE[$p]; #except the last one
close STDOUT;
open STDOUT">&OUTPIPE[1]"; #first output pipe still open
exec cmd[1];#execute the first command
}
elseif (x=max-1) #second command
{
for($n=1;$n<max-1;$n++) #close all input pipes
if n!=x-1
close INPIPE[$n];
if n!=x-1
close OUTPIPE[$n]; #close outpipe
close STDIN; #close STDIN
open STDIN">&INPIPE[n-1];
close STDOUT; #close STDOUT
open STDOUT">&OUTPIPE[n];
exec cmd[2];
}
elseif(x=max) #last command
for($n=1;$n<max-2;$n++) #close all input pipes
Close INPIPE[$n];
for($p=1;$p<$max-1;$p++) #close all output pipes
close INPIPE[$p]; #close INPIPE
close STDIN;
open STDIN">&INPIPE[max];
exec cmd[3]; #execute the last command
}
}
for($d=1; $d<$max-1; $d++)
{
close INPIPE[$d]; #close INPIPES
close OUTPIPE[$d]; #close outpipes
}
for($s=1;$s<$max-1;$s++)
{
wait; # wait for the child process
}
{
Edit Masem - 2001-07-24 - Added CODE tags (sic)