zoukankan      html  css  js  c++  java
  • BASH重定向问题

    APUE 3.5关于重定向有个容易迷惑人的问题:

    ./a.out > outfile 2>&1

    ./a.out 2>&1 > outfile

    问两者区别?

    1   int main()
    2      {
    3        printf("output to stdio
    ");
    4        fprintf(stderr,"output to stderr
    ");
    5        return 1;
    6      }

    结果如下:

    1   qun@ThinkPad ~/tmp $ ./a.out > outfile 2>&1
    2   qun@ThinkPad ~/tmp $ cat outfile
    3   output to stderr
    4   output to stdin
    5   qun@ThinkPad ~/tmp $ ./a.out 2>&1 > outfile
    6   output to stderr

    原因是:
      由于bash从左往右处理,在./a.out > outfile的时候,将a.out的fd 1定向到了outfile文件的fd上,然后才遇到2>&1,这时再将a.out的文件描述符2定向到文件描述符1上,这样stderr和stdout,就都到outfile上了。
      
      而下面一个则不然,先遇到2>&1,这时将a.out的文件描述符2定向到文件描述符1上,1是终端。再遇到 > outfile,这时将a.out的文件描述符1到outfile这个文件。后面重定向没有受到前面重定向的影响。

  • 相关阅读:
    从输入网址到页面呈现的过程
    Git 常用命令合集
    Jquery浅克隆与深克隆
    CSS变量教程
    设计模式
    Servlet和JSP简述
    SQL Server,MySQL,Oracle三者的区别
    mysql事务处理
    计时器
    java中length,length(),size()区别
  • 原文地址:https://www.cnblogs.com/chia/p/7489802.html
Copyright © 2011-2022 走看看