Sunday, June 10, 2012

bash: redirect and append both stdout and stderr

To redirect stdout in bash, overwriting file

cmd > file.txt

To redirect stdout in bash, appending to file

cmd >> file.txt

To redirect both stdout and stderr, overwriting

cmd &> file.txt

How do I redirect both stdout and stderr appending to file? cmd &>> file.txt does not work for me

Source: Tips4all


  1. There are 2 ways, 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, in general any Bash specific code, is not the way to go.

    Also remember that Bash 4 &>> is just shorter writing, it does not introduce any new functionality or similar.

    Syntax is (beside other redirection syntax) described here:

  2. Please keep in mind Current ZSH 4.3.11 support

    cmd &>>outfile

    just out of box