这对我来说没有意义。
wibble > /dev/null 2>&1
Run Code Online (Sandbox Code Playgroud)
我认为如果是这样的话会更有意义:
wibble 2>&1 > /dev/null
Run Code Online (Sandbox Code Playgroud)
换句话说
Commands Output Sendall STDERRORS to STDOUT then SEND it all to /dev/null
Run Code Online (Sandbox Code Playgroud)
命令重定向顺序背后的想法是什么xxx > /dev/null 2>1
?
Mat*_*Mat 41
重定向是从左到右处理的。如果你这样做
2>&1 1> /dev/null
Run Code Online (Sandbox Code Playgroud)
第一个重定向stderr
指向当时指向的流stdout
(本质上是您的 tty)。它不会stderr
为stdout
.
然后stdout
被重定向到位桶。该stdout
重定向不影响以前的stderr
重定向。stderr
仍然是指您的 tty。
所以:
ls file_that_doesnt_exist 2>&1 1> /dev/null
Run Code Online (Sandbox Code Playgroud)
将仅在您的终端上打印错误消息。
在bash
重定向文档页面提到了这一点明确:
请注意,重定向的顺序很重要。例如,命令
ls > dirlist 2>&1
Run Code Online (Sandbox Code Playgroud)
将标准输出和标准错误都指向文件 dirlist,而命令
ls 2>&1 > dirlist
Run Code Online (Sandbox Code Playgroud)
仅将标准输出定向到文件 dirlist ,因为在将标准输出重定向到 dirlist 之前,标准错误已从标准输出复制。