Hi,

It is maybe not a good idea to use /bin/bash as a pipe,
because it is an interactive interpreter, and not made
for pipe-communication.  Normally you would just check
for an end of file byte, but bash will not send you
one.  Is there any reason to use bash?


On Wed, 28 Apr 2004 06:06:30 +0900, Hal Fulton wrote:

> Here's something I've never figured out.
> 
> Suppose I want real two-way communication with a process via popen.
> This seems doable.
> 
> But apparently the read hangs until I do a close_write; and if I
> do that, I can't write again. A flush doesn't work.
> 
> Here's what I was thinking (simplified):
> 
>    io = IO.popen("/bin/bash","r+") do |f|
>      f.puts "ls"
>      puts f.readlines
>      f.puts "date"
>      puts f.readlines
>    end
> 
> I even tried this (following) abomination, to no avail:
> 
>    io = IO.popen("/bin/bash","r+") do |f|
>      writer = f.dup
>      f.puts "ls\n"
>      f.close_write
>      puts f.readlines
>      w = writer.dup
>      w.puts "date\n"
>      w.close_write
>      puts f.readlines
>    end
> 
> 
> Can someone advise?
> 
> 
> Hal