为什么要以这种方式将 STDERR 重定向到 /dev/null ?

为什么要以这种方式将 STDERR 重定向到 /dev/null ?

这对我来说没有意义。

wibble > /dev/null 2>&1

我认为如果是这样的话会更有意义:

wibble 2>&1 > /dev/null

换句话说

Commands Output Sendall STDERRORS to STDOUT then SEND it all to /dev/null

命令重定向顺序背后的想法是什么xxx > /dev/null 2>1

答案1

重定向是从左到右处理的。如果你这样做

2>&1 1> /dev/null

第一个重定向指向当时指向的stderr流(本质上就是您的 tty)。stdout它不会创建stderr的别名stdout

然后stdout重定向到比特桶。重定向stdout不会影响之前的stderr重定向。stderr仍然指的是你的 tty。

所以:

ls file_that_doesnt_exist 2>&1 1> /dev/null

将仅在您的终端上打印错误消息。

bash重定向文档页面明确提到了这一点:

请注意,重定向的顺序很重要。例如,命令

          ls > dirlist 2>&1

将标准输出和标准错误定向到文件目录列表,而命令

          ls 2>&1 > dirlist

仅将标准输出定向到文件目录列表,因为在标准输出重定向到 dirlist 之前,标准错误已从标准输出复制

相关内容