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

3 comments:

  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: http://bash-hackers.org/wiki/doku.php/syntax/redirection#appending_redirected_output_and_error_output

    ReplyDelete
  2. Please keep in mind Current ZSH 4.3.11 support

    cmd &>>outfile


    just out of box

    ReplyDelete