zoukankan      html  css  js  c++  java
  • shell重定向的顺序问题

    三个默认的文件描述符

    0: stdin(标准输入)

    1: stdout(标准输出)

    2: stderr(标准错误输出)

    系统中这3个文件描述符所对应的文件:

    重定向顺序

    示例脚本

    echo "hello world"
    echo "xxx"
    

    sh test.sh

    hello world
    xxx
    

    sh test.sh >/tmp/out

    $ cat /tmp/out
    hello world
    xxx
    

    sh -x test.sh >/tmp/out 2>/tmp/err

    stdout和stderr分别被重定向到/tmp/out和/tmp/err。

    $ cat /tmp/out
    hello world
    xxx
    $ cat /tmp/err
    + echo 'hello world'
    + echo xxx
    

    sh -x test.sh 2>&1 >/tmp/out

    stdout被重定向到/tmp/out,stderr被重定向到stdout。因为在执行2>&1的时候,stdout对应的文件为/dev/pts/2,所以stderr的输出仍为stdout,后面的stdout被重定向到/tmp/out。

    $ sh -x test.sh 2>&1 >/tmp/out
    + echo 'hello world'
    + echo xxx
    $ cat /tmp/out
    hello world
    xxx
    

    文件描述符、打开的文件句柄以及i-node之间的关系

    img

    总结

    从左向右检查每个重定向,前面的重定向会影响后面的。

  • 相关阅读:
    5月26号
    5.17 Quartz笔记
    5.23Java各种对象(PO,BO,VO,DTO,POJO,DAO,Entity,JavaBean,JavaBeans)的区分
    5.23@Comfiguration的解释
    5月20号
    5.20
    java与C++不同之处(java不支持特性)
    递归算法之回溯
    0119
    linux打包及备份指令
  • 原文地址:https://www.cnblogs.com/jmliao/p/11561776.html
Copyright © 2011-2022 走看看