Shell标准输出、标准错误 >/dev/null 2>&1

时间:2022-04-15 04:54:41

Shell中可能经常能看到:>/dev/null  2>&1

eg:sudo kill -9 `ps -elf |grep -v grep|grep $1|awk '{print $4}'` 1>/dev/null 2>/dev/null

命令的结果可以通过%>的形式来定义输出

/dev/null 代表空设备文件

  • > 代表重定向到哪里,例如:echo "123" > /home/123.txt
  • 1 表示stdout标准输出,系统默认值是1,所以">/dev/null"等同于"1>/dev/null"
  • 2 表示stderr标准错误
  • & 表示等同于的意思,2>&1,表示2的输出重定向等同于1

那么本文标题的语句:

1>/dev/null 首先表示标准输出重定向到空设备文件,也就是不输出任何信息到终端,说白了就是不显示任何信息。

2>&1 接着,标准错误输出重定向等同于 标准输出,因为之前标准输出已经重定向到了空设备文件,所以标准错误输出也重定向到空设备文件。


2>&1写在后面的原因

格式:command > file 2>&1   ==  command  1> file 2>&1

首先是command > file将标准输出重定向到file中, 2>&1 是标准错误拷贝了标准输出,也就是同样被重定向到file中,最终结果就是标准输出和错误都被重定向到file中。

如果改成: command 2>&1 >file

2>&1 标准错误拷贝了标准输出的行为,但此时标准输出还是输出到终端。当 >file 后,标准输出才被重定向到file,但标准错误仍然保留了先前的设置,即保持输出到终端。