LINUX SHELL 中 2>&1 重定向的问题

35 篇文章 1 订阅

        LINUX SHELL 中 2>&1 重定向的问题

分类: Linux Shell 581人阅读 评论(1) 收藏 举报

#man bash 里面有一段有关重定向的描述:

       Note that the order of redirections is significant.   For  example,  the
       command

              ls > dirlist 2>&1

       directs  both  standard  output  and standard error to the file dirlist,
       while the command

              ls 2>&1 > dirlist

       directs only the standard output to file dirlist, because  the  standard
       error  was  duplicated as standard output before the standard output was
       redirected to dirlist.


  辗转各个社区,终于算是略微明白了一点。

上面第一条命令:#ls >dirlist 2>&1 

把标准输出(STDOUT,1)和标准错误(STDERR,2)都重定向到文件 dirlist 的过程如下:

0 命令执行前

  (此时:STDOUT指向终端、STDERR 也指向终端)

1 建立名为 dirlist 的空文件

2 执行 > dirlist

  (因为 > 默认为重定向 STDOUT ,即该步骤将 STDOUT 重定向为 文件dirlist)

  (此时:STDOUT指向 文件dirlist、STDERR 指向终端)

3 执行 2>&1 ,简单的说,就是 STDERR 变得和 STDOUT 一样。换句话说,就是把 STDERR 重定向为 “STDOUT 所指向的东西”

  (因为之前 STDOUT 已经指向了 文件dirlist,所以执行到该步骤时,STDERR 也重定向到了 文件dirlist)

  (此时:STDOUT指向 文件dirlist、STDERR 也指向 文件dirlist)

4 执行 ls,则由于执行 ls 所产生的标准输出和标准错误信息都被输出到了 文件dirlist 里面。


上面的第二条命令:#ls 2>&1 > dirlist

仅仅把标准输出重定向到了 文件dirlist中(标准错误依然是终端)

我们依然一步一步走,看看为什么:

0 命令执行前

  (此时:STDOUT指向终端、STDERR 也指向终端)

1 建立名为 dirlist 的空文件

2 执行 2>&1

  (因为原来 STDOUT 和 STDERR 都指向终端,所以相当于,把 STDERR 从终端,重定向为终端……)

  (此时:STDOUT指向终端、STDERR 也依然指向终端)

3 执行 > dirlist,把 STDOUT 重定向为 文件dirlist

  (此时:STDOUT指向 文件dirlist、STDERR 依然指向终端)

4 执行 ls,那么,产生的 STDOUT 输出到了 文件dirlist里面,而 STDERR 输出到了终端


另外,要将 STDOUT 和 STDERR 都输出到文件,也可以这么写:

  #ls &> dirlist

这样还比较方便一点。


以下是相关讨论的地址:

http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO-3.html#ss3.2

http://bbs.chinaunix.net/viewthread.php?tid=16361

http://www.linuxsir.com/bbs/showthread.php?threadid=38203

http://www.linuxsir.com/bbs/showthread.php?threadid=40501&highlight=%D6%D8%B6%A8%CF%F2

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值