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.
exec 1>&2
The operator >&2 means redirect the address of file descriptor 1 (stdout) to the address of file descriptor 2 (stderr)
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
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.
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
The fredirection operators may precede or appear anywhere within a simple command or may follow a command.
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.
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.
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
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.