这对我来说没有意义。
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 之前,标准错误已从标准输出复制。