Combining Commands

You can connect commands together with a | character (vertical bar, or pipe) to make the output of the first become the input of the second:

% ls | wc -l                       Count number of files in current directory
% who | grep colin                 Find out if colin is logged in

One of the most common uses of pipes is to add more to the end of a command so you can keep the output from scrolling off the screen:

% cal 1492 | more               View calendar for year 1492 using pager

Commands connected with pipes form a longer command called a pipeline. Pipelines can consist of more than two programs. The following command lists the sizes (in disk blocks) and names of your files, strips off the initial "total size" line, sorts the rest of the sizes in reverse numeric order, and then displays the first five lines of the result. The effect is to report your five largest files:

% ls -s | tail +2 | sort -rn | head -5

By giving you the ability to construct pipelines, the shell allows you to do things that individual commands cannot do by themselves.

Pipelines and output redirection can be used together:

% ls -s | tail +2 | sort -rn | head -5 > big5

You can combine the output of sequential commands if you surround the sequence with parentheses. These two command lines are different:

% date ; who | more
% (date ; who) | more

The first sequence writes the output of date to the terminal and the output of who to more. The second sequence writes the output of both commands to more.

The same principle applies to output redirection: ...

Get Using csh & tcsh now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.