Shell-重定向0 1 2含义解释


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

流程:2-->1-->log

再来分析下
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还是指向屏幕)
    所以这就不是我们想要的结果。

流程:

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
也可关注“哎呦运维”微信订阅号,随时接受文章推送。

猜你喜欢

转载自blog.csdn.net/qq_37126850/article/details/107116693