Linux shell命令中的 > 和 &
nohup python3 /home/main.py 2>&1 &
1 和 2 在 shell 命令中代表什么?
> 符号的意义
>语法: file_descriptor>file_name
所以2>&1代表将标准错误输出重定向到标准输出中,为什么不能用2>1?
答:这代表将错误日志输出到1这个文件中。&可以理解为C语言的指针,加了&1,代表这是一个引用(引用的标准输出)
& 的意义
放在命令最后,代表这条命令放到后台去执行,此时可以执行新的命令了。
nohub的意义
全称 no hangup 即不挂起,即使关掉shell,依然会继续执行。
&和nohub的区别和常见使用场景
&代表后台执行,免疫SIGINT信号(Ctrl+C),但是不免疫SIGHUP信号(关闭shell);nohub相反,关闭shell仍会执行,但是Ctrl+C可以中断执行。因此可以将这两个联合使用,让进程既不受Ctrl+C影响,也不受shell关闭影响,类似守护进程。
2>&1为什么要放最后
分别分析这两行命令的逻辑:
nohup java -jar app.jar >log 2>&1 &
nohup java -jar app.jar 2>&1 >log &
第一条命令的逻辑是:
本来1----->屏幕 (1指向屏幕)
执行>log后, 1----->log (1指向log)
执行2>&1后, 2----->1 (2指向1,而1指向log,因此2也指向了log)
第二条命令的逻辑是
本来1----->屏幕 (1指向屏幕)
执行2>&1后, 2----->1 (2指向1,而1指向屏幕,因此2也指向了屏幕)
执行>log后, 1----->log (1指向log,2还是指向屏幕)
因此,不放最后,会丢失标准错误输出,不符预期。
浙公网安备 33010602011771号