Linux shell中2>&1的含义解释

  • 标准输入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----->屏幕 (1指向屏幕)
  2. 执行>log后, 1----->log (1指向log)
  3. 执行2>&1后, 2----->1 (2指向1,而1指向log,因此2也指向了log)

再来分析下

java -jar gmall2020-mock-log-2021-01-22.jar  2>&1 >log &"
  1. 本来1----->屏幕 (1指向屏幕)
  2. 执行2>&1后, 2----->1 (2指向1,而1指向屏幕,因此2也指向了屏幕)
  3. 执行>log后, 1----->log (1指向log,2还是指向屏幕)
    所以这就不是我们想要的结果。

每次都写">log 2>&1"太麻烦,能简写吗?
有以下两种简写方式(一般使用第一种)

&>log
>&log

猜你喜欢

转载自blog.csdn.net/qq_46548855/article/details/134312731