Loading
Home ›
Bash Input Redirection
May 17, 2008 By Mitch Frazier
in
If you use the shell you surely know about redirection:
# echo 'hello world' >output # cat <outputThe first line writes "hello world" to the file "output", the second reads it back and writes it to standard output (normally the terminal).
Then there are "here" documents:
# cat <<EOF > hello > world > EOFA "here" document is essentially a temporary, nameless file that is used as input to a command, here the "cat" command.
A less commonly seen form of here document is the "here" string:
# cat <<<'hello world'In this form the string following the "<<<" becomes the content of the "here" document.
Another less commonly seen form of redirection is redirecting to a specific file descriptor:
# echo 'Error: oops' >&2This redirects the output of the "echo" command to file descriptor 2, aka standard error. This is useful if you want to keep the error output of your scripts from contaminating the normal output when the output of your script is redirected.
These features work in bash and may not be available in other shells.
______________________
Mitch Frazier is an Associate Editor for Linux Journal.
Trending Topics
| You Need A Budget | Feb 10, 2012 |
| The Linux powered LAN Gaming House | Feb 08, 2012 |
| Creating a vDSO: the Colonel's Other Chicken | Feb 06, 2012 |
| Your CMS Is Not Your Web Site | Feb 01, 2012 |
| Casper, the Friendly (and Persistent) Ghost | Jan 31, 2012 |
| Razor-qt 0.4 - Qt based Desktop Environment | Jan 30, 2012 |
- Fun with ethtool
- Parallel Programming with NVIDIA CUDA
- Readers' Choice Awards 2011
- 100% disappointed with the decision to go all digital.
- Linux-Based X Terminals with XDMCP
- Validate an E-Mail Address with PHP, the Right Way
- You Need A Budget
- The Linux powered LAN Gaming House
- Why Python?
- Python for Android
- Employment Posters
2 hours 49 min ago - Sure the best distro is
4 hours 9 min ago - BeOS was the best
6 hours 53 min ago - I use Wireshark on a daily
11 hours 23 min ago - buena información
16 hours 30 min ago - One important "bucket" that I didn't note (désolé si qqun deja d
17 hours 31 min ago - Gnome3 is such a POS. No one
1 day 2 hours ago - Gnome 3 is the biggest POS
1 day 3 hours ago - I didn't knew this thing by
1 day 9 hours ago - Author's reply
1 day 12 hours ago





Comments
Here is an example of a way
Here is an example of a way to redirect command output without using a pipe.
Very useful. You could, for example, substitute ls for some program to query a database or sed commands for processing some files
I am not sure if this will run on old versions of bash though
It's worth mentioning some
It's worth mentioning some more examples of input redirection. For a file
matched_filescontaining a list of files, you could grep the list:grep mp3 < matched_filesOr do something to each file in the list:
Lots more great examples are on the Useless Use of Cat Award page.
swap STDOUT and STDERR
swap STDOUT and STDERR: "3>&1 1>&2 2>&3"
as in:
(/usr/bin/$COMMAND $PARAM 3>&1 1>&2 2>&3 | grep -v $uninteresting_error ) 3>&1 1>&2 2>&3
Grep stderr
In a bit more detail:
-
3>&1 - moves file descriptor 1 (aka stdout) to file descriptor 3.
-
1>&2 - moves file descriptor 2 (aka stderr) to file descriptor 1.
-
2>&3 - moves file descriptor 3 to file descriptor 2 (aka stderr).
Similar to: and thereby swapping the standard out and the standard error. Which then allows the stderr (rather than stdout) to be piped into grep.Mitch Frazier is an Associate Editor for Linux Journal.
To elaborate further
3>&1 redirects output sent to 3 to stdout,
1>&2 redirects output sent to stdout to stderr,
and 2>&3 redirects output sent to stderr to 3.
If you just want to include stderr output in your stdout along with the existing stdout output, you can just use 2>&1