There are 3 built-in file descriptors: stdin, stdout and stderr (std=standard). (You can define your own, see the linked article.)
0
/1
/2
references stdin/stdout/stderr>
/2>
redirects stdout/stderr, where >
is taken as 1>
&1
/&2
references stdout/stderr&>
redirects stdout and stderr = everything (caution: see below)Caution:
&>
is functional as of Bash 4
Show archive.org snapshot
. This seems to result in a slightly differing behaviour when redirecting output in Ruby scripts.
Instead of cmd &> file
, prefer cmd > file 2>&1
, which equals: "Redirect stdout of cmd
to file
, and redirect stderr just where stdout is going", e.g. command > /dev/null 2>&1
.
>
creates or overwrites a file>>
creates or appends to a file<
reads from a file, where <
is taken as 0<
Note: You should be pretty sure of what a command is doing if you are going to wipe it's output.
ls -l > ls-l.txt
grep da * 2> grep-errors.txt
grep da * 1>&2
do_stuff &> /dev/null
command < input-file > output-file
, reads from input-file and writes stdout to output-file