Table of Contents

What are Redirections in Bash? Example and how-to

About

This article talks about shell redirections in the Bash shell.

Through redirection you can direct the input and output of a command to and from other files and programs, and chain commands together in a pipeline.

Example

Redirect output to stderr for all command that comes next

exec 1>&2

The operator >&2 means redirect the address of file descriptor 1 (stdout) to the address of file descriptor 2 (stderr)

Discard any output

mycommand >/dev/null 2>&1

Operator

>

cat leftFile.txt > rightFile.txt

“Greater than” takes the standard output of the command on the left, and redirects it to the file on the right.

>>

cat myFile.txt >> rightFile.txt

>> takes the standard output of the command on the left and appends (adds) it to the file on the right.

<

cat < rightFile.txt

< takes the standard input from the file on the right and inputs it into the program on the left.

|

cat rightFile.txt | wc

where:

| is a pipe. The pipe takes the standard output of the command on the left, and pipes it as standard input to the command on the right.

<<< (3 arrows)

This is a Bash variant, this is an expansion of the here document declaration

The word is expanded and supplied to the command on its standard input.

<<< word

Operators

The fredirection operators may precede or appear anywhere within a simple command or may follow a command.

Order of redirections

Redirections are processed in the order they appear, from left to right.

Note that the order of redirections is significant. For example, the command

ls > dirlist 2>&1

directs both standard output (file descriptor 1) and standard error (file descriptor 2) to the file dirlist, while the command

ls 2>&1 > dirlist

directs only the standard output to file dirlist, because the standard error was made a copy of the standard output before the standard output was redirected to dirlist.

File Descriptor

Each redirection that may be preceded by a file descriptor number may instead be preceded by a word of the form {varname}. In this case, for each redirection operator except >&- and <&-, the shell will allocate a file descriptor greater than 10 and assign it to {varname}. If >&- or <&- is preceded by {varname}, the value of varname defines the file descriptor to close.

Redirections using file descriptors greater than 9 should be used with care, as they may conflict with file descriptors the shell uses internally.

Standard stream

file descriptor Name
0 /dev/stdin
1 /dev/stdout (Default)
2 /dev/stderr

In the following descriptions,

Create a symbolic link to redirect a log to stdin/stderr with ln

ln -sf /dev/stdout /var/log/nginx/access.log 
ln -sf /dev/stderr /var/log/nginx/error.log

Redirection Target

The word following the redirection operator in the following descriptions, unless otherwise noted, is subjected to:

If it expands to more than one word, Bash reports an error.

Bash handles several filenames specially when they are used in redirections, as described in the following table:

/dev/fd/fd If fd is a valid integer, file descriptor fd is duplicated.
/dev/stdin File descriptor 0 is duplicated.
/dev/stdout File descriptor 1 is duplicated.
/dev/stderr File descriptor 2 is duplicated.
/dev/tcp/host/port If host is a valid hostname or Internet address, and port is an integer port number or service name, Bash attempts to open a TCP connection to the corresponding socket.
/dev/udp/host/port If host is a valid hostname or Internet address, and port is an integer port number or service name, Bash attempts to open a UDP connection to the corresponding socket.

A failure to open or create a file causes the redirection to fail.

Documentation / Reference