title: Shell-重定向2>&1的含义解释
date: 2020-7-3 22:27:36
categories:
- Shell
tags: - 重定向
一.0 1 2 在Linux中代表的含义
名称 | 代码 | 操作符 | Linux 下文件描述符(Debian 为例) |
---|---|---|---|
标准输入 | 0 | < or << | /dev/stdin -> /proc/self/fd/0 ->/dev/pts/0 |
标准输出 | 1 | > ,>>,1>,1>> | /dev/stdout ->/proc/self/fd/1 ->/dev/pts/1 |
标准错误输出 | 2 | 2> or 2>> | /dev/stderr ->/proc/self/fd/2 ->/dev/pts/2 |
日常使用的语法:
echo "hello" > test.log
或者是:
echo "hello" 1>test.log
二.关于2>&1的含义
1.含义:将标准错误输出重定向到标准输出
2. >&是一个整体,不可分开
– 写成2>1
是不对的,意思为:将标准错误输出重定向到名为1
的文件里
3. 写成2&>1
也是错误的
三.为什么2>&1要放后面
比如:
nohub java -jar app.jar >log 2>&1 &
最后一个&
为后台执行
为什么2>&1
一定要写到>log
后面,才表示标准错误输出和标准输出都定向到log
中?
- 本来1---->屏幕(1指屏幕)
- 执行>log后,1---->log(1指向log)
- 执行2>&1后,2---->1 (2指向1,而1指向log,因此2也指向了log))
流程:2-->1-->log
再来分析下
nohup java -jar app.jar 2>&1 >log &
- 本来1----->屏幕 (1指向屏幕)
- 执行2>&1后, 2----->1 (2指向1,而1指向屏幕,因此2也指向了屏幕)
- 执行>log后, 1----->log (1指向log,2还是指向屏幕)
所以这就不是我们想要的结果。
流程:
1=屏幕
2---->1 = 2---->屏幕
1=log
2=屏幕
四. 简写">log 2>&1"
简写:
&>log
>&log
原例子:
nohup java -jar app.jar >log 2>&1 &
简写成:
nohub java -jar app.jar &>log &
nohub java -jar app.jar >&log &
引用:Linux shell中2>&1的含义解释 一个行走的民
更多更好的原创文章,请访问官方网站: 点我就能跳转咯-》https://nothingzh.gitee.io
也可关注“哎呦运维”微信订阅号,随时接受文章推送。