关于bash中的2>&1 &理解

经常运行一些python脚本或者jar包,如果直接运行python *.py,或者 java -jar *.jar,再进行其他操作,需要终止运行,所以应该是后台运行。
这也就经常看到这样的句式:

1
nohup python *.py > nohup.log 2>&1 &

1、开始的nohup(no hang up, 不挂起),用于系统后台不挂断的运行命令;
2、中间的python *.py我们好理解,就是运行脚本;
3、> nohup.log 意思将新建nohup.log文件,并将运行日志写到该文件中,我们可以使用>>,表示追加日志内容;
4、bash中0,1,2分别表示STDIN_FILENO(标准输入),STDOUT_FILENO( 标准输出),STDERR_FILENO(标准错误),输入输出可以重定向,如cat < text.c将test.c重定向为cat命令的输入源,输出重定向就是将指定具体的输出目标以替换默认的标准输出。默认输入只有一个(0,STDIN_FILENO),而默认输出有两个(标准输出1,STDOUT_FILENO,标准错误输出2,STDERR_FILENO),因此输出的错误信息会被输出到2,而普通信息会输出到1,但我们希望在一个终端下看到所有的信息,那么综上就应该是2>1,而2>&1中&是为了bash将1解释成标准输出而不是文件1,至于2>&1 &中最后一个&则是让bash在后台运行。