Bash Redirections Cheat Sheet

ADVERTISEMENT

Bash Redirections Cheat Sheet
Redirect the standard output (stdout) of cmd to a file.
cmd > file
Same as cmd > file. 1 is the default file descriptor (fd) for stdout.
cmd 1> file
Redirect the standard error (stderr) of cmd to a file. 2 is the default fd for stderr.
cmd 2> file
Append stdout of cmd to a file.
cmd >> file
Append stderr of cmd to a file.
cmd 2>> file
Redirect stdout and stderr of cmd to a file.
cmd &> file
Another way to redirect both stdout and stderr of cmd to a file. This is not the same
cmd > file 2>&1
as cmd 2>&1 > file. Redirection order matters!
Discard stdout of cmd.
cmd > /dev/null
Discard stderr of cmd.
cmd 2> /dev/null
Discard stdout and stderr of cmd.
cmd &> /dev/null
Redirect the contents of the file to the standard input (stdin) of cmd.
cmd < file
cmd << EOL
Redirect a bunch of lines to the stdin. If 'EOL' is quoted, text is treated literally. This
line1
is called a here-document.
line2
EOL
cmd <<- EOL
<tab>foo
Redirect a bunch of lines to the stdin and strip the leading tabs.
<tab><tab>bar
EOL
Redirect a single line of text to the stdin of cmd. This is called a here-string.
cmd <<< "string"
Redirect stderr of all commands to a file forever.
exec 2> file
Open a file for reading using a custom file descriptor.
exec 3< file
Open a file for writing using a custom file descriptor.
exec 3> file
Open a file for reading and writing using a custom file descriptor.
exec 3<> file
Close a file descriptor.
exec 3>&-
Make file descriptor 4 to be a copy of file descriptor 3. (Copy fd 3 to 4.)
exec 4>&3
Copy file descriptor 3 to 4 and close file descriptor 3.
exec 4>&3-
Write to a custom file descriptor.
echo "foo" >&3
Read from a custom file descriptor.
cat <&3
Redirect stdout from multiple commands to a file (using a sub-shell).
(cmd1; cmd2) > file
Redirect stdout from multiple commands to a file (faster; not using a sub-shell).
{ cmd1; cmd2; } > file
Open a TCP connection to host:port. (This is a bash feature, not Linux feature).
exec 3<> /dev/tcp/host/port
Open a UDP connection to host:port. (This is a bash feature, not Linux feature).
exec 3<> /dev/udp/host/port
Redirect stdout of cmd1 to an anonymous fifo, then pass the fifo to cmd as an argument.
cmd <(cmd1)
Useful when cmd doesn’t read from stdin directly.
Redirect stdout of cmd1 to an anonymous fifo, then redirect the fifo to stdin of cmd.
cmd < <(cmd1)
Best example: diff <(find /path1 | sort) <(find /path2 | sort).
Redirect stdout of cmd1 and cmd2 to two anonymous fifos, then pass both fifos as
cmd <(cmd1) <(cmd2)
arguments to cmd.
Run cmd2 with its stdin connected to an anonymous fifo, and pass the filename of the
cmd1 >(cmd2)
pipe as an argument to cmd1.
Run cmd2 with its stdin connected to an anonymous fifo, then redirect stdout of cmd
cmd1 > >(cmd2)
to this anonymous pipe.
Redirect stdout of cmd1 to stdin of cmd2. Pro-tip: This is the same as cmd1 > >(cmd2),
cmd1 | cmd2
same as cmd2 < <(cmd1), same as > >(cmd2) cmd1, same as < <(cmd1) cmd2.
Redirect stdout and stderr of cmd1 to stdin of cmd2 (bash 4.0+ only).
Use
cmd1 |& cmd2
cmd1 2>&1 | cmd2 for older bashes.
Redirect stdout of cmd to a file and print it to screen.
cmd | tee file
Open a file for writing using a named file descriptor called {filew} (bash 4.1+).
exec {filew}> file
Swap stdout and stderr of cmd.
cmd 3>&1 1>&2 2>&3
Send stdout of cmd to cmd1 and stderr of cmd to cmd2.
cmd > >(cmd1) 2> >(cmd2)
cmd1 | cmd2 | cmd3 | cmd4
Find out the exit codes of all piped commands.
echo ${PIPESTATUS[@]}
I explained each one of these redirections in my article
All About Bash
Redirections:
Did I miss any redirections? Let me know! Email me peter@catonmat.net, or fork this cheat sheet on github:
A cheat sheet by
(peter@catonmat.net), September 2012.
- good coders code, great coders reuse
Released under GNU Free Document License.

ADVERTISEMENT

00 votes

Related Articles

Related forms

Related Categories

Parent category: Education
Go