Posted over 3 years ago. Visible to the public.

Bash output redirection

There are 3 built-in file descriptors: stdin, stdout and stderr (std=standard). (You can define your own, see the linked article.)

Basic

  • 0/1/2 references stdin/stdout/stderr
  • >/2> redirects stdout/stderr, where > is taken as 1>
  • &1/&2 references stdout/stderr
  • &> redirects stdout and stderr = everything (caution: see below)

Caution: &> is functional as of Bash 4. This seems to result in a slightly differing behaviour when redirecting output in Ruby scripts.
Instead of cmd &> file, prefer cmd > file 2>&1, which equals: "Redirect stdout of cmd to file, and redirect stderr just where stdout is going", e.g. command > /dev/null 2>&1.

Applied to files

  • > creates or overwrites a file
  • >> creates or appends to a file
  • < reads from a file, where < is taken as 0<

Note: You should be pretty sure of what a command is doing if you are going to wipe it's output.

Redirection Examples

  • stdout to file: ls -l > ls-l.txt
  • stderr to file: grep da * 2> grep-errors.txt
  • one to another: grep da * 1>&2
  • everything: do_stuff &> /dev/null
  • combined: command < input-file > output-file, reads from input-file and writes stdout to output-file
Growing Rails Applications in Practice
Check out our new e-book:
Learn to structure large Ruby on Rails codebases with the tools you already know and love.

Author of this card:

Avatar
Dominik Schöler
Last edit:
over 2 years ago
by Dominik Schöler
About this deck:
We are makandra and do test-driven, agile Ruby on Rails software development.
License for source code
Posted by Dominik Schöler to makandropedia