
The Origin of Unix Pipes - mrleinad
http://doc.cat-v.org/unix/pipes/
======
arethuza
In my very first job interview I was asked to explain Unix pipes and I used
the analogy of garden hoses - only to be told that was a stupid way of
explaining them!

~~~
nickolai
I guess you're happy they did not hire you, right?

~~~
arethuza
I did get the job :-)

------
api
1964.

It is truly amazing just how much of what we use, from big ideas to little
ones, was invented in the 1960s.

~~~
woodall
Invention brings the idea to life. Innovation brings the ideas to market.

------
bnegreve
One should forward this document to microsoft.

------
scrrr
According to Wikipedia the UNIX-Pipes came along in the 70s. This document
however seems to refer to something called DTSS.
<http://en.wikipedia.org/wiki/Pipe_(Unix)#History>

~~~
klochner
Wow - I actually added that entry about DTSS a few years after my father (Ken
Lochner) died. It's kind of a trip to now read it on HN.

------
sandGorgon
I asked this previously on SO -
[http://stackoverflow.com/questions/3121385/is-it-possible-
to...](http://stackoverflow.com/questions/3121385/is-it-possible-to-make-
something-like-osx-services-for-linux-by-leveraging-pipes)

What is the difference between OSX services and Unix pipes ? Could something
like OSX services be built trivially on Linux ?

~~~
burgerbrain
As the commenter on your SO post has mentioned, they are not actually the same
thing. Pipes are a much lower level concept than these OSX services. Of course
you could implement them on linux, and you might even want to use pipes to do
it, but its not a terribly interesting problem. Really its just GUI design,
not a unix thing at all.

~~~
sandGorgon
Maybe my question was framed wrong.

If I ask about how a OSX-like services framework may be created, what is the
answer ? For example, there are OSX services that remove spaces from text or
even summarize paragraphs. IMHO, some of them are contextual - some services
only show up as active when you copy a URL, etc.

They seem pretty nifty and I always wondered why Linux doesnt have something
like this.

~~~
georgieporgie
You keep asking the same question repeatedly, hoping that some magic
combination of words will lead to a different answer.

[http://blogs.msdn.com/b/oldnewthing/archive/2009/01/20/93411...](http://blogs.msdn.com/b/oldnewthing/archive/2009/01/20/9341164.aspx)

UNIX pipes are only a _tiny bit_ like OS X Services from a _user's
perspective_. They are nothing alike from a program's perspective.

As others have said, UNIX pipes simply connect one program's standard output
to another program's standard input. That's all. It uses the exact same
mechanism that would otherwise show information to you and accept input from
you.

OS X Services are a completely different, proprietary thing. It works via the
'Pasteboard' which is rather like a secondary clipboard. Apple created a
specific interface which must be recognized by a program in order to supply OS
X Services with data. This interface is wholly unrelated to the rest of the
program's interfaces.

OS X Services are much more akin to something that you would build on Windows
using COM, like a Windows Explorer Shell Extension.

If you wanted to recreate OS X Services on Linux, you would have to define
some sort of new interface for exchanging data between applications, then
convince developers around the world to add the new API into their programs.

~~~
sandGorgon
thanks.

FYI - My question changed from the similarity of pipes and services to just
thinking about how something like services could be implemented on Linux. I
did take a look at GnuStep Services, but is it the way someone would have
done, if starting from a clean slate ? Powershell has a "pipeline" as well
which works at object level. Again, it may not be the same thing as pipes or
services implementation-wise, but it is conceptually relevant.

------
tastybites
Glad they chose 'pipe' over 'hose'.

------
mrleinad
To "massage data" sounds a bit like what some scientists do whenever they
don't get the results they expect.

Kinda funny concept anyway...

~~~
njharman
You've attributed one connotation (probably the one most known to public due
to media reporting of scientist malfeasance) to the phrase "massage data".
Which actually has the more general meaning of to manipulate, to process data.
Perhaps to get the data into different format, or to extract just the
rows/columns/bits that are of interest.

~~~
mrleinad
A drawback of English not being my native language, most probably. :) Thanks
for your clarification.

------
LogicHoleFlaw
Maybe some folks here with a better understanding of pipes than myself can
help me figure out how to do the following using pipes and not a temporary
file. I need a minimalist method to format a couple of email headers, append
an email body, then send that email with `msmtp`. This is all running on a
small embedded linux system with some additional packages bolted on. This will
be mailing the status updates from my backup server to myself. Partly I'm
doing this because I don't want to run a full-blown mail user agent, and
partly I'm just curious how concise it can be :)

The requirement is that this be an executable script which can take any number
of command-line arguments describing email headers, and which receives the
body of an email on STDIN. I think this can all be done via pipes but I'm not
entirely sure how - the trick is that the output of the program over STDOUT
needs to be the concatenation of formatted command-line arguments plus the
contents of STDIN. I had difficulty figuring out how to have two different
commands both send output, in order, to the STDIN of `msmtp -t`. msmtp is
configured to send email via a Google Apps account.

Here's what I'm using at the moment. It works but I think it could be more
elegant and UNIXY without the temporary file.

    
    
      #!/bin/sh
      T=`/opt/bin/mktemp`                         # create a temporary file
      echo -e "From:$1\nTo:$2\nSubject:$3\n" > $T # format command-line args into the file
      cat <&0 >>$T                                # append STDIN to the file
      msmtp -t <$T                                # mail the file (-t parses the smtp recipient from the email headers)
      rm $T                                       # delete the file
    
      # used as follows:
      #/usr/local/bin/minimail "sender@example.com" "recipient@example.com" "Subject of the Email" <body.txt
    

Any ideas?

~~~
tripa

        (echo;cat)|msmtp
    

But yeah, stackoverflow.com

~~~
LogicHoleFlaw
That works perfectly. Thank you.

Sorry for the noise.

