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.
Redirect output to stderr for all command that comes next
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
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
<<< (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.
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.
In the following descriptions,
- if the file descriptor number is omitted, and the first character of the redirection operator is ‘<’, the redirection refers to the standard input (file descriptor 0).
- If the first character of the redirection operator is ‘>’, the redirection refers to the standard output (file descriptor 1).
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
The word following the redirection operator in the following descriptions, unless otherwise noted, is subjected to:
- brace expansion,
- tilde expansion,
- parameter expansion,
- command substitution,
- arithmetic expansion,
- quote removal,
- filename expansion,
- and word splitting.
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.