Issue #7358 has been updated by felipec (Felipe Contreras).


drbrain (Eric Hodel) wrote:
> =begin
> If you want data to show up in ((%/tmp/foo%)), redirect stdout in the child process.  Setting file descriptor 3 does nothing since ((%echo%)) makes no use of it.

That's not what I want, and yes, setting that does nothing, or *should* do nothing, but that's now what the command above did, it failed.

Fortunately it seems to be fixed now.
----------------------------------------
Bug #7358: Wrong fd redirection on fork
https://bugs.ruby-lang.org/issues/7358#change-41593

Author: felipec (Felipe Contreras)
Status: Rejected
Priority: Normal
Assignee: 
Category: 
Target version: 
ruby -v: 1.9.3p327
Backport: 


It seems fd redirecton only works with spawn, not with fork+exec (at least for fd 3).

% ruby -v
ruby 1.9.3p327 (2012-11-10 revision 37606) [x86_64-linux]

#!/usr/bin/env ruby

tmp = File.new('/tmp/foo', File::CREAT | File::WRONLY)
cmd = ['echo', 'yes']

pid = Process.spawn(*cmd, 3 => tmp)
Process.wait(pid)

pid = fork do
  Process.exec(*cmd, :close_others => true, 3 => tmp)
end
Process.wait(pid)


-- 
http://bugs.ruby-lang.org/