1.5. Programs Are Designed to Work Together
As pointed out by Kernighan and Pike in
The UNIX Programming Environment, there are a
number of principles that distinguish the Unix environment. One key
concept is that programs are tools. Like all good tools, they should
be specific in function, but usable for many different purposes.
In order for programs to become general-purpose tools, they must be
data independent. This means three things:
-
Within limits, the output of any program should be usable as the
input to another.
-
All of the information needed by a program should be either contained
in the data stream passed to it or specified on the command line. A
program should not prompt for input or do unnecessary formatting of
output. In most cases, this means that Unix programs work with plain
text files that don't contain
"nonprintable"
or "control"
characters.
-
If no arguments are given, a program should read the
standard input (usually the terminal
keyboard) and write the standard output (usually the terminal
screen).
Programs
that can be used in this way are often called
filters.
One of the most important consequences of these guidelines is that
programs can be strung together in
"pipelines" in which the output of
one program is used as the input of another. A
vertical bar (|) represents
pipe
and means "take the output of the program on the
left and feed it into the program on the right."
For example, you can pipe the output of a search program to another
program that sorts the output, and then pipe the result to the
printer program or redirect it to a
file (Section 43.1).
Not all Unix programs work
together in this way. An interactive program like the Emacs editor (Section 19.1)
generally doesn't read from or write to pipes
you'd create on the command line. Instead, once the
shell has started Emacs, the editor works
independently of the shell (Section 1.4),
reading its input and output directly from the terminal. And there
are even exceptions to this exception. A program like less (Section 12.3) can read
its standard input from a pipe and still interact with you at the
keyboard. It does that by reading directly from your tty (Section 2.7).
-- TOR
 |  |  | 1.4. Communication with Unix |  | 1.6. There Are Many Shells |
Copyright © 2003 O'Reilly & Associates. All rights reserved.
|