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指向屏幕)
- 执行>log后, 1----->log (1指向log)
- 执行2>&1后, 2----->1 (2指向1,而1指向log,因此2也指向了log)
命令2(换下位置):
nohup java -jar app.jar 2>&1 >log &
- 本来1----->屏幕 (1指向屏幕)
- 执行2>&1后, 2----->1 (2指向1,而1指向屏幕,因此2也指向了屏幕)
- 执行>log后, 1----->log (1指向log,2还是指向屏幕)
ps:
我们平时所使用的
echo 'hellozy' > a.log
也可以写成
echo 'hellozy' 1> a.log # 1和>之间不能有空格