1285
Comment:
|
1374
|
Deletions are marked like this. | Additions are marked like this. |
Line 3: | Line 3: |
Redirecting the standard output of a single command is as easy as | Redirecting the standard output of a single command is as easy as: |
Line 19: | Line 19: |
In a loop or other larger code structure: | or, a fancier way: {{{ # Bash only. Equivalent to date > file 2>&1 but non-portable. date &> file }}} Redirecting an entire loop: |
Line 35: | Line 41: |
Otherwise command grouping helps: | Otherwise, command grouping helps: |
Line 40: | Line 46: |
# some other command | # some other commands |
Line 47: | Line 53: |
[[http://bash-hackers.org/wiki/doku.php/syntax/redirection|More discussion]] | [[http://wiki.bash-hackers.org/syntax/redirection|More discussion]] |
Line 49: | Line 55: |
[[http://bash-hackers.org/wiki/doku.php/howto/redirection_tutorial|In-depth: Illustrated Tutorial]] | [[http://wiki.bash-hackers.org/howto/redirection_tutorial|In-depth: Illustrated Tutorial]] |
How can I redirect the output of multiple commands at once?
Redirecting the standard output of a single command is as easy as:
date > file
To redirect standard error:
date 2> file
To redirect both:
date > file 2>&1
or, a fancier way:
# Bash only. Equivalent to date > file 2>&1 but non-portable. date &> file
Redirecting an entire loop:
for i in $list; do echo "Now processing $i" # more stuff here... done > file 2>&1
However, this can become tedious if the output of many programs should be redirected. If all output of a script should go into a file (e.g. a log file), the exec command can be used:
# redirect both standard output and standard error to "log.txt" exec > log.txt 2>&1 # all output including stderr now goes into "log.txt"
Otherwise, command grouping helps:
{ date # some other commands echo done } > messages.log 2>&1
In this example, the output of all commands within the curly braces is redirected to the file messages.log.
In-depth: Illustrated Tutorial