Linux 命令之 2>&1 &

实例:项目中用到的启动程序脚本 start_server.sh  执行命令:sh   start_server.sh
nohup python3 oa_sup_server.py >/dev/null 2>&1  &
 
nohup表示当前用户和系统会话下的进程忽略响应HUP消息,也就是不挂断的运行命令;
 
& 符号(命令末尾出现的) 是把该命令以后台的job的形式运行;
 
>/dev/null 表示一个空设备,就是把command 的执行结果重定向到空设备中,就是不显示任何信息
 
2>&1 :
首先了解一下:
0:表示stdin 标准输入
1:表示stdout  标准输出
2:表示stderr  标准错误
command  >/dev/hull   相当于执行了 command  1  >/dev/null  执行command产生了标准输出stdout(用1表示)重定向到/dev/null的设备文件中;
 
对于 2>&1的理解:2就是标准错误,1就是标准输出,那么可以简单理解为把标准错误重定向到标准输出;
为什么是 &1 而不是 1, 这里的&符号是什么?
&符号可以理解为引用(reference),&1 就是对标准输出的引用;
 
command 1 >a  2>&1 与 command 1>a 2>a 还是有区别的,区别就是在于前者只打开一次文件a,后者会打开文件a两次,并导致stdout被stderr覆盖,&1 的含义就可以理解为用标准输出的引用,引用的就是重定向标准输出产生打开a;
 
从IO效率上来讲,command 1 >a 2>&1 比 command 1>a 2>a 的效率更高; 
原文地址:https://www.cnblogs.com/guo-s/p/12788763.html