- 标准输入0:从键盘获得输入 /proc/self/fd/0
- p标准输出1:输出到屏幕(即控制台) /proc/self/fd/1
- p错误输出2:输出到屏幕(即控制台) /proc/self/fd/2
新手写法
1>/dev/null 2>/dev/null
大佬写法
>/dev/null 2>&1
为什么会这样写
&1其实就是1>/dev/null 2指向1就是指向黑洞
深入的理解
java -jar gmall2020-mock-log-2021-01-22.jar >log 2>&1 &"
为什么2>&1一定要写到>/dev/null后面,才表示标准错误输出和标准输出都定向到log中?
我们不妨把1和2都理解是一个指针,然后来看上面的语句就是这样的:
- 本来1----->屏幕 (1指向屏幕)
- 执行>log后, 1----->log (1指向log)
- 执行2>&1后, 2----->1 (2指向1,而1指向log,因此2也指向了log)
再来分析下
java -jar gmall2020-mock-log-2021-01-22.jar 2>&1 >log &"
- 本来1----->屏幕 (1指向屏幕)
- 执行2>&1后, 2----->1 (2指向1,而1指向屏幕,因此2也指向了屏幕)
- 执行>log后, 1----->log (1指向log,2还是指向屏幕)
所以这就不是我们想要的结果。
每次都写">log 2>&1"太麻烦,能简写吗?
有以下两种简写方式(一般使用第一种)
&>log
>&log