Bash Redirection
What is Redirection?
Normally, a command prints its output to the screen. Redirection lets you send that output somewhere else, like a file.
You can also make a command read its input from a file instead of the keyboard.
>: write output to a file (replace the file)>>: add output to the end of a file<: read input from a file2>: write error messages to a file
Write Output to a File (>)
The > operator sends the output of a command to a file. If the file does not exist, it is created:
Example: Save Output in a File
echo "Hello World" > greeting.txt
cat greeting.txt
Hello World
Be careful: If the file already exists, > replaces everything in it.
Append to a File (>>)
The >> operator adds the output to the end of the file, and keeps what is already there:
Example: Append Lines
echo "First line" > log.txt
echo "Second line" >> log.txt
cat log.txt
First line
Second line
Read Input from a File (<)
The < operator gives the content of a file to a command, as if you typed it.
Here, wc -l counts the lines it receives. Because it reads from input, no file name is printed:
Redirect Error Messages (2>)
Commands have two output streams: normal output (number 1) and error messages (number 2).
Use 2> to send only the error messages to a file:
Example: Save Errors in a File
ls names.txt missing.txt 2> errors.txt
names.txt
cat errors.txt
ls: cannot access 'missing.txt': No such file or directory
The file list still went to the screen, while the error went to errors.txt.
Redirect Output and Errors Together
Use &> to send both normal output and errors to the same file:
Example: Save Everything in One File
ls names.txt missing.txt &> all.txt
cat all.txt
ls: cannot access 'missing.txt': No such file or directory
names.txt
You will also see the older form > file 2>&1. It means "send output to the file, then send errors (2) to the same place as output (1)".
Throw Output Away (/dev/null)
/dev/null is a special file that throws away everything written to it. Use it to hide output you do not need: