From bdae98d0f372169cafc55a5a9f632b8b49b58e0b Mon Sep 17 00:00:00 2001 From: Vidar Holen Date: Sat, 3 Mar 2018 13:45:40 -0800 Subject: [PATCH] Updated SC2069 (markdown) --- SC2069.md | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/SC2069.md b/SC2069.md index 8d4541f..82e0fa7 100644 --- a/SC2069.md +++ b/SC2069.md @@ -1,4 +1,4 @@ -## The order of the 2>&1 and the redirect matters. The 2>&1 has to be last. +## To redirect stdout+stderr, 2>&1 must be last (or use '{ cmd > file; } 2>&1' to clarify). ### Problematic code: @@ -14,7 +14,7 @@ firefox > /dev/null 2>&1 ### Rationale: -Redirections are handled in order. +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". @@ -24,7 +24,11 @@ In other words, the problematic code hides stdout and shows stderr. The correct ### Exceptions -If you want stderr as stdout and stdout to a file, you can ignore this message. +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. ### Related resources: