我们在写启动脚本的时候,会用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
了。