# Pipelining

**URL:** <https://www.ruby-forum.com/t/pipelining/111841>\
**Category:** Ruby\
**Created:** [August 12, 2007, 1:39am UTC](https://www.ruby-forum.com/t/pipelining/111841 "2007-08-12T01:39:06Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![fara77](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/f/a587f6/32.png) [@fara77](https://www.ruby-forum.com/u/fara77)\
**Post date:** [August 12, 2007, 1:39am UTC](https://www.ruby-forum.com/t/pipelining/111841/1 "2007-08-12T01:39:06Z")

</div>

Hello everyone

I urgently some help with this code. I am trying to implement the  
following pipeline and i keep getting this error Erro:ENOENT  
can anybody please help me to get this code working

#input is the command line  
def handleCommandLine(input)  
# it splits the pipeline into an array  
command = input.split(’|’).map{|c|word\_list©}  
i = 0  
while i\< command.length  
commands = command.at(i)  
execute(commands)  
i +=1  
end  
end

def execute(commands)  
rd, wr = IO.pipe  
if fork.nil?  
# child  
rd.close  
$stdout.reopen(wr)  
wr.close  
exec(\*commands)  
exit  
else  
# parent  
wr.close  
$stdin.reopen(rd)  
rd.close  
end  
end

---

<div class="post-metadata">

**Author:** ![fara77](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/f/a587f6/32.png) [@fara77](https://www.ruby-forum.com/u/fara77)\
**Post date:** [August 12, 2007, 2:39am UTC](https://www.ruby-forum.com/t/pipelining/111841/2 "2007-08-12T02:39:50Z")

</div>

On 8/11/07, Fara N. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> Hello everyone
> 
> I urgently some help with this code. I am trying to implement the  
> following pipeline and i keep getting this error Erro:ENOENT  
> can anybody please help me to get this code working

The error is most likely coming from the “exec” command in the forked  
child process. It’s telling you that one of your commands does not  
exist.

Can you post the full error message? That might give some more insight  
and a better answer (this is just my best guess).

Blessings,  
TwP

PS In your child, call exit! instead of just plain exit. exit! will  
prevent the at\_exit routines from running and killing file descriptors  
in the parent. See the documentation on fork for more details.

---

<div class="post-metadata">

**Author:** ![fara77](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/f/a587f6/32.png) [@fara77](https://www.ruby-forum.com/u/fara77)\
**Post date:** [August 12, 2007, 3:02am UTC](https://www.ruby-forum.com/t/pipelining/111841/3 "2007-08-12T03:02:36Z")

</div>

Hi Tim,

All right, To illustrate what happens i have add a puts command to the  
code ! the result is so bizzare!!!  
Here is the code again:

```
    def handleCommandLine(input)
       #splits the command line
  command = input.split('|').map{|c|word_list(c)}
       i = 0
 while i< command.length
commands = command.at(i)
puts commands , "...........\n"
      execute(commands)
i +=1
end
 end

```

def execute(commands)  
rd, wr = IO.pipe  
if fork.nil?  
# child  
rd.close  
$stdout.reopen(wr)  
wr.close  
exec(\*commands)  
exit  
else  
# parent  
wr.close  
$stdin.reopen(rd)  
rd.close  
Process.wait  
end  
end

so i used this to test it

001\>ls | grep D

here is the result!! the correct result must be 001\>Desktop and it has  
to stop there!!!

ls  
…  
grep  
D  
…  
001\>Desktop  
…  
Test.rb:45:in `exec': No such file or directory - Desktop (Errno::ENOENT) from Test.rb:45:in`execute’  
from Test.rb:32:in `handleCommandLine' from Test.rb:20:in`run’  
from Test.rb:17:in `loop' from Test.rb:17:in`run’  
from Test.rb:68

thanks a lot

Fara
