SC2069 – ShellCheck Wiki

See this page on GitHub


To redirect stdout+stderr, 2>&1 must be last (or use { cmd > file; } 2>&1 to clarify).

Problematic code:

firefox 2>&1 > /dev/null

Correct code:

firefox > /dev/null 2>&1


When it comes to redirection, order matters.

The problematic code means "Point stderr to where stdout is currently pointing (the terminal). Then point stdout to /dev/null".

The correct code means "Point stdout to /dev/null. Then point stderr to where stdout is currently pointing (/dev/null)".

In other words, the problematic code hides stdout and shows stderr. The correct code hides both stderr and stdout, which is usually the intention.


If you actually do want to redirect stdout to a file, and then turn stderr into the new stdout, you can make this more explicit with braces:

{ firefox > /dev/null; } 2>&1

Also note that this warning does not trigger when output is piped or captured.

ShellCheck is a static analysis tool for shell scripts. This page is part of its documentation.