nohup 跟的 >/dev/null 2>&1 是什么意思?

半兽人 发表于: 2021-07-27   最后更新时间: 2021-07-28 19:36:29  
{{totalSubscript}} 订阅, 1,581 游览

我们在写启动脚本的时候,会用nohup &,这个大家都知道,但是通常会跟上 >/dev/null 2>&1,例如:

nohup java -jar xxx.jar >/dev/null 2>&1 &

这个到底表示什么意思?

几个基本符号及其含义

  • /dev/null 表示空设备文件
  • 0 表示stdin标准输入
  • 1 表示stdout标准输出
  • 2 表示stderr标准错误

对于& 1 更准确的说应该是文件描述符1,而1表示标准输出stdout

对于2,则表示标准错误stderr

2>&1的意思就是将标准错误重定向到标准输出。这里标准输出已经重定向到了 /dev/null。那么标准错误也会输出到/dev/null

可以把/dev/null可以看作"黑洞",它等价于一个只写文件,所有写入它的内容都会永远丢失,而尝试从它那儿读取内容则什么也读不到。

2>&1

> 左边的 2,表示stderr标准错误,不需要加&

但是在 > 右边的 1 必须加&,才表示stdout标准输出

如果不加&,表示的是文件名

另外>左边如果不加,默认是1

测试

ls 2>1

不会报没有2文件的错误,但会输出一个空的文件1;

ls xxx 2>1

没有xxx这个文件的错误输出到了文件1中;

ls xxx 2>&1

不会生成1这个文件了,不过错误跑到标准输出了;

ls xxx >out.txt 2>&1

实际上可换成 ls xxx 1>out.txt 2>&1; 重定向符号>默认是1,错误和输出都传到out.txt了。

更新于 2021-07-28

查看Linux更多相关的文章或提一个关于Linux的问题,也可以与我们一起分享文章