From: Robert Klemme Date: 2011-05-13T23:23:15+09:00 Subject: Re: Shell pipeline in Ruby? On Fri, May 13, 2011 at 3:27 PM, Michal Suchanek wrote: > On 13 May 2011 10:44, Robert Klemme wrote: >> On Thu, May 12, 2011 at 6:05 PM, Michal Suchanek wrote: >>> how do you write an equivalent of >>> >>> $ cmdA | cmdB | cmdC >>> >>> in Ruby? >>> >>> Specifically, I would like to see the PID, return value and stderr of >>> each of these commands but I would like cmdB to read the stdout of >>> cmdA directly, on its stdin, and similarily for cmdC and cmdB. >>> >>> Here I am not interested in feeding cmdA some particular input (eg. it >>> can read /dev/null for all I care) but in general gluing arbitrary fd >>> to its stdin might be desirable in other cases. >> >> $ ri Open3.pipeline_r Open3.pipeline_start >> > Again, like in Open3.pipeline the :err argument used in the example is > not documented. Not true. From ri Open3.pipeline_r in 1.9.2p180: Each cmd is a string or an array. If it is an array, the elements are passed to Process.spawn. cmd: commandline command line string which is passed to a shell [env, commandline, opts] command line string which is passed to a shell [env, cmdname, arg1, ..., opts] command name and one or more arguments (no shell) [env, [cmdname, argv0], arg1, ..., opts] command name and arguments including argv[0] (no shell) Note that env and opts are optional, as Process.spawn. Then $ ri Process.spawn > From the description of the example it seems it captures the stderr of > all the commands together. > > Are there more arguments like that? > > What do they mean? See above. > Also this is available in ruby 1.9 only. Well? Cheers robert -- remember.guy do |as, often| as.you_can - without end http://blog.rubybestpractices.com/