Bash Input Redirection

May 17th, 2008 by Mitch Frazier in

If you use the shell you surely know about redirection:

  # echo 'hello world' >output
  # cat <output
The first line writes "hello world" to the file "output", the second reads it back and writes it to standard output (normally the terminal).

Then there are "here" documents:

  # cat <<EOF
  > hello
  > world
  > EOF
A "here" document is essentially a temporary, nameless file that is used as input to a command, here the "cat" command.

A less commonly seen form of here document is the "here" string:

  # cat <<<'hello world'
In this form the string following the "<<<" becomes the content of the "here" document.

Another less commonly seen form of redirection is redirecting to a specific file descriptor:

  # echo 'Error: oops' >&2
This redirects the output of the "echo" command to file descriptor 2, aka standard error. This is useful if you want to keep the error output of your scripts from contaminating the normal output when the output of your script is redirected.

These features work in bash and may not be available in other shells.

__________________________

Mitch Frazier is the System Administrator at Linux Journal.


Special Magazine Offer -- 2 Free Trial Issues!
Receive 2 free trial issues of Linux Journal as well as instant online access to current and past issues. There's NO RISK and NO OBLIGATION to buy. CLICK HERE for offer

Linux Journal: delivering readers the advice and inspiration they need to get the most out of their Linux systems since 1994.

Sorry, offer available in the US only. International orders, click here.

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.

It's worth mentioning some

On May 20th, 2008 Adam Backstrom (not verified) says:

It's worth mentioning some more examples of input redirection. For a file matched_files containing a list of files, you could grep the list:

grep mp3 < matched_files

Or do something to each file in the list:

while read line ; do
  flac "$line" && rm -f "$line"
done < matched_files

Lots more great examples are on the Useless Use of Cat Award page.

swap STDOUT and STDERR

On May 17th, 2008 Serge van Ginderachter (not verified) says:

swap STDOUT and STDERR: "3>&1 1>&2 2>&3"

as in:

(/usr/bin/$COMMAND $PARAM 3>&1 1>&2 2>&3 | grep -v $uninteresting_error ) 3>&1 1>&2 2>&3

Grep stderr

On May 17th, 2008 Mitch Frazier says:

In a bit more detail:

  • 3>&1 - moves file descriptor 1 (aka stdout) to file descriptor 3.
  • 1>&2 - moves file descriptor 2 (aka stderr) to file descriptor 1.
  • 2>&3 - moves file descriptor 3 to file descriptor 2 (aka stderr).
Similar to:
   tmp    = stdout
   stdout = stderr
   stderr = tmp
and thereby swapping the standard out and the standard error. Which then allows the stderr (rather than stdout) to be piped into grep.

__________________________

Mitch Frazier is the System Administrator at Linux Journal.

Featured Videos

Non-linear video editing tools are great, but they're not always the best tool for the job. This is where a powerful tool like ffmpeg becomes useful. This tutorial by Elliot Isaacson covers the basics of transcoding video, as well as more advanced tricks like creating animations, screen captures, and slow motion effects.

Shawn Powers reviews the HP Mini-Note portable computer.

Thanks to our sponsor: Silicon Mechanics

Silicon Mechanics is a leading manufacturer of rackmount servers, storage, and high performance computing hardware. The best warranty offerings available are backed by experts dedicated to customer satisfaction.

From the Magazine

August 2008, #172

There's nuttin like a Cool Project to give you some relief from the summer heat, so get out your parka cuz we got a bunch of em. First up is the BUG, not a bug, The BUG. It's got a GPS, camera and more, in a hand-sized package that's user programmable. The BUG does everything. It's both a floor wax and a dessert topping. Get one now. Need a software version of a Swiss Army knife? Take a look at Billix, and don't leave home without it. Then, chew on this one, an X server on a Gumstix device driving an E-Ink display. Need more storage? How about 16 Terabytes? Can do.

And, of course, we have the usual cast of characters: Marcel, Reuven, Dave, Kyle, Doc, plus the new kid on the block Shawn Powers. But it doesn't stop there: build a MythTV box on a budget, build your own GIS system, set up the tools to monitor your enterprise and more. Finally, remember The War of the Worlds? Now you can play too.

Read this issue