Home How can I redirect and append both stdout and stderr to a file with Bash?

# How can I redirect and append both stdout and stderr to a file with Bash?

flybywire
1#
flybywire Published in 2009-05-18 04:19:45Z
 To redirect stdout to a truncated file in Bash, I know to use: cmd > file.txt  To redirect stdout in Bash, appending to a file, I know to use: cmd >> file.txt  To redirect both stdout and stderr to a truncated file, I know to use: cmd &> file.txt  How do I redirect both stdout and stderr appending to a file? cmd &>> file.txt did not work for me.
Fritz
2#
 cmd >>file.txt 2>&1  Bash executes the redirects from left to right as follows: >>file.txt: Open file.txt in append mode and redirect stdout there. 2>&1: Redirect stderr to "where stdout is currently going". In this case, that is a file opened in append mode. In other words, the &1 reuses the file descriptor which stdout currently uses.
Mathias Bynens
3#
Mathias Bynens Reply to 2014-03-23 11:24:34Z
 There are two ways to do this, depending on your Bash version. The classic and portable (Bash pre-4) way is: cmd >> outfile 2>&1  A nonportable way, starting with Bash 4 is cmd &>> outfile  (analog to &> outfile) For good coding style, you should decide if portability is a concern (then use classic way) decide if portability even to Bash pre-4 is a concern (then use classic way) no matter which syntax you use, not change it within the same script (confusion!) If your script already starts with #!/bin/sh (no matter if intended or not), then the Bash 4 solution, and in general any Bash-specific code, is not the way to go. Also remember that Bash 4 &>> is just shorter syntax — it does not introduce any new functionality or anything like that. The syntax is (beside other redirection syntax) described here: http://bash-hackers.org/wiki/doku.php/syntax/redirection#appending_redirected_output_and_error_output
mikemaccana
4#
 In Bash 4 (as well as ZSH 4.3.11): cmd &>>outfile  just out of box
Aaron R.
5#
Aaron R. Reply to 2015-12-11 15:39:21Z
 In Bash you can also explicitly specify your redirects to different files: cmd >log.out 2>log_error.out  Appending would be: cmd >>log.out 2>>log_error.out 
Quintus.Zhou
6#

Try this

You_command 1>output.log  2>&1


Your usage of &>x.file does work in bash4. sorry for that : (

## Here comes some additional tips.

0, 1, 2...9 are file descriptors in bash. 0 stands for stdin, 1 stands for stdout, 2 stands for stderror. 3~9 is spare for any other temporary usage.

Any file descriptor can be redirected to other file descriptor or file by using operator > or >>(append).

Usage: <file_descriptor> > <filename | &file_descriptor>

 This should work fine: your_command 2>&1 | tee -a file.txt  It will store all logs in file.txt as well as dump them on terminal.