Command help

Found a buddy who used something like:

hostname = open("|hostname").gets

And...

I see that it works, but I don't find any of the documentation that makes sense.

So -- it seems to be IO class, but how? There's no IO declaration there.
Also, I can't find anything that says you can open a command with a preceding pipe and get the output of the executed command.

I'm familiar with perls open: open(FH, "hostname |") with a suffixed pipe -- which is consistent with unix pipe usage.

But can someone explain to me what's going on here so my brain doesn't implode?

http://ruby-doc.org/core/classes/Kernel.html#M001989

···

On 10/5/06, Tom Allison <tallison@tacocat.net> wrote:

Found a buddy who used something like:

hostname = open("|hostname").gets

And...

I see that it works, but I don't find any of the documentation that makes sense.

So -- it seems to be IO class, but how? There's no IO declaration there.
Also, I can't find anything that says you can open a command with a preceding
pipe and get the output of the executed command.

I'm familiar with perls open: open(FH, "hostname |") with a suffixed pipe --
which is consistent with unix pipe usage.

But can someone explain to me what's going on here so my brain doesn't implode?

Tom Allison wrote:

But can someone explain to me what's going on here so my brain doesn't implode?

Throw back to the old ftp pipe days? E.g., see,

  Infinite Ink's Archie, FTP, and Uncompression

Later,

···

--
Bil Kleb
http://fun3d.larc.nasa.gov

Jan Svitok wrote:

···

On 10/5/06, Tom Allison <tallison@tacocat.net> wrote:

Found a buddy who used something like:

hostname = open("|hostname").gets

And...

I see that it works, but I don't find any of the documentation that makes sense.

So -- it seems to be IO class, but how? There's no IO declaration there.
Also, I can't find anything that says you can open a command with a preceding
pipe and get the output of the executed command.

I'm familiar with perls open: open(FH, "hostname |") with a suffixed pipe --
which is consistent with unix pipe usage.

But can someone explain to me what's going on here so my brain doesn't implode?

module Kernel - RDoc Documentation

OK, I missed the "Kernel#open" in the list of where I can use open. NOTE: the list from 'ri' could be better formatted.

What's with the pipe being at the wrong end?
What's the thinking behind that?

" open a pipe to the command X "

just guessing...

-a

···

On Thu, 5 Oct 2006, Tom Allison wrote:

What's with the pipe being at the wrong end?
What's the thinking behind that?

--
in order to be effective truth must penetrate like an arrow - and that is
likely to hurt. -- wei wu wei

Tom Allison schrieb:

hostname = open("|hostname").gets

>

What's with the pipe being at the wrong end?
What's the thinking behind that?

You can find a short description in ri or the Pickaxe:

C:\tmp>ri IO
-------------------------------------------------------------- Class: IO
      Class +IO+ is the basis for all input and output in Ruby. An I/O
      stream may be _duplexed_ (that is, bidirectional), and so may use
      more than one native operating system stream.

      Many of the examples in this section use class +File+, the only
      standard subclass of +IO+. The two classes are closely associated.

      As used in this section, _portname_ may take any of the following
      forms.

      * A plain string represents a filename suitable for the
          underlying operating system.

>>>>>
      * A string starting with ``+|+'' indicates a subprocess. The
          remainder of the string following the ``+|+'' is invoked as a
          process with appropriate input/output channels connected to it.
>>>>>

      * A string equal to ``+|-+'' will create another Ruby instance as
          a subprocess.

Regards,
Pit