linux - 2>&1

在linux系统中,0 1 2 是文件描述符,含义如下:

  • 0 表示stdin标准输入
  • 1 表示stdout标准输出
  • 2 表示stderr标准错误

所以2>&1的含义:将标准错误输出重定向到标准输出

符号>&是一个整体,不可分开。比如有些人可能会这么想:2是标准错误输入,1是标准输出,>是重定向符号,那么"将标准错误输出重定向到标准输出"是不是就应该写成"2>1"就行了?是这样吗?如果是尝试过,你就知道2>1的写法其实是将标准错误输出重定向到名为"1"的文件里去了。写成2&>1也是不可以的。

 

为什么2>&1要放在后面?

命令1:

nohup java -jar app.jar >log 2>&1 &    # 最后一个&表示把这条命令放到后台执行
  1. 本来1----->屏幕 (1指向屏幕)
  2. 执行>log后, 1----->log (1指向log)
  3. 执行2>&1后, 2----->1 (2指向1,而1指向log,因此2也指向了log)

命令2(换下位置):

nohup java -jar app.jar 2>&1 >log &
  1. 本来1----->屏幕 (1指向屏幕)
  2. 执行2>&1后, 2----->1 (2指向1,而1指向屏幕,因此2也指向了屏幕)
  3. 执行>log后, 1----->log (1指向log,2还是指向屏幕)

 

 

 

 

ps:

我们平时所使用的

echo 'hellozy' > a.log

也可以写成

echo 'hellozy' 1> a.log    # 1和>之间不能有空格

 

posted @ 2022-02-25 15:59  小虫虫大虫虫  阅读(66)  评论(0编辑  收藏  举报