Bash Input Redirection

 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 an Associate Editor for Linux Journal.

Comments

Comment viewing options

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

Here is an example of a way

Anonymous's picture

Here is an example of a way to redirect command output without using a pipe.

while read line; do
echo This file: $line;
done <<EOF
$(ls)
EOF

Very useful. You could, for example, substitute ls for some program to query a database or sed commands for processing some files

I am not sure if this will run on old versions of bash though

It's worth mentioning some

Adam Backstrom's picture

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

Serge van Ginderachter's picture

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

Mitch Frazier's picture

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 an Associate Editor for Linux Journal.

To elaborate further

rak's picture

3>&1 redirects output sent to 3 to stdout,
1>&2 redirects output sent to stdout to stderr,
and 2>&3 redirects output sent to stderr to 3.

If you just want to include stderr output in your stdout along with the existing stdout output, you can just use 2>&1

Webcast
How to Build an Optimal Hadoop Cluster to Store and Maintain Unlimited Amounts of Data Using Microservers

Realizing the promise of Apache® Hadoop® requires the effective deployment of compute, memory, storage and networking to achieve optimal results. With its flexibility and multitude of options, it is easy to over or under provision the server infrastructure, resulting in poor performance and high TCO. Join us for an in depth, technical discussion with industry experts from leading Hadoop and server companies who will provide insights into the key considerations for designing and deploying an optimal Hadoop cluster.

Learn More

Sponsored by AMD

White Paper
Red Hat White Paper: Using an Open Source Framework to Catch the Bad Guy

Built-in forensics, incident response, and security with Red Hat Enterprise Linux 6

Every security policy provides guidance and requirements for ensuring adequate protection of information and data, as well as high-level technical and administrative security requirements for a system in a given environment. Traditionally, providing security for a system focuses on the confidentiality of the information on it. However, protecting the data integrity and system and data availability is just as important. For example, when processing United States intelligence information, there are three attributes that require protection: confidentiality, integrity, and availability.

Learn more about catching the bad guy in this free white paper.

Learn More

Sponsored by DLT Solutions