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

Webinar
One Click, Universal Protection: Implementing Centralized Security Policies on Linux Systems

As Linux continues to play an ever increasing role in corporate data centers and institutions, ensuring the integrity and protection of these systems must be a priority. With 60% of the world's websites and an increasing share of organization's mission-critical workloads running on Linux, failing to stop malware and other advanced threats on Linux can increasingly impact an organization's reputation and bottom line.

Learn More

Sponsored by Bit9

Webinar
Linux Backup and Recovery Webinar

Most companies incorporate backup procedures for critical data, which can be restored quickly if a loss occurs. However, fewer companies are prepared for catastrophic system failures, in which they lose all data, the entire operating system, applications, settings, patches and more, reducing their system(s) to “bare metal.” After all, before data can be restored to a system, there must be a system to restore it to.

In this one hour webinar, learn how to enhance your existing backup strategies for better disaster recovery preparedness using Storix System Backup Administrator (SBAdmin), a highly flexible bare-metal recovery solution for UNIX and Linux systems.

Learn More

Sponsored by Storix