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

转载 2013年12月05日 15:14:02

        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

关于shell命令的定向输出 2>&1

转转地址:http://blog.csdn.net/scz123/article/details/1108856 mycommand >mylog.txt 2>&1 应该是最经典的用法了。 命令的...
  • qq_21792169
  • qq_21792169
  • 2016年04月29日 09:14
  • 17158

Shell重定向 &>file、2>&1、1>&2 、/dev/null的区别

在shell脚本中,默认情况下,总是有三个文件处于打开状态,标准输入(键盘输入)、标准输出(输出到屏幕)、标准错误(也是输出到屏幕),它们分别对应的文件描述符是0,1,2 。 >  默认...
  • u011630575
  • u011630575
  • 2016年08月08日 15:07
  • 648

Shell I/O重定向与exec的使用介绍

shell
  • beautysleeper
  • beautysleeper
  • 2016年09月20日 13:45
  • 982

Linux Shell脚本编程--(linux空设备文件和重定向)>/dev/null 2>&1

linux空设备文件和重定向 /dev/null代表空文件设备 1表示系统标准输出,系统默认值是1, > /dev/null等同于1 > /dev/null 对于 >dev/null 2>&1 1>...
  • xifeijian
  • xifeijian
  • 2013年07月30日 23:02
  • 6835

shell重定向(大于号,小于号,左右,2>&1,&)

1. 标准输入,标准输出与标准错误输出 Linux下系统打开3个文件,标准输入,标准输出,标准错误输出。 标准输入:从键盘输入数据,即从键盘读入数据。 标准输出:把数据输出到终端上。 标准错误输出:把...
  • longshenlmj
  • longshenlmj
  • 2014年05月05日 16:51
  • 7130

linux中shell变量$#,$@,$0,$1,$2的含义解释

linux中shell变量$#,$@,$0,$1,$2的含义解释 linux中shell变量$#,$@,$0,$1,$2的含义解释:  变量说明:  $$  Shell本身的PID...
  • beginning1126
  • beginning1126
  • 2013年03月04日 15:38
  • 6100

linux exec与重定向

linux exec与重定向 exec和source都属于bash内部命令(builtins commands),在bash下输入man exec或man source可以查看所有的内部命令信息...
  • shanghai2420
  • shanghai2420
  • 2016年06月20日 10:54
  • 1599

shell中的"2>&1"命令

50 16 * * * rootrm-rf /abc/* 2>&1 & 这是corntab中的一行命令,作用是在每天的16点50分执行rootrm -rf/abc/* 即清空目录abc 在命令的最...
  • w417318472
  • w417318472
  • 2014年03月17日 17:59
  • 1338

【转】Linux shell IO重定向

终于理解了所谓的I/O重定向。 Linux shell中的File Descripter可以理解为一个指向文件的指针。默认有三个FD:0,1,2。分别指向的是:Keyboard设备文件,Moni...
  • weiyuefei
  • weiyuefei
  • 2014年08月25日 19:16
  • 1600

批处理: 关于cmd命令的重定向输出 2>&1

mycommand >mylog.txt 2>&1 应该是最经典的用法了。 命令的结果可以通过“%>”的形式来定向输出,%表示文件描述符:1为标准输出stdout、2为标准错误stderr。系统...
  • liangzhao_jay
  • liangzhao_jay
  • 2014年06月16日 17:34
  • 5642
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:LINUX SHELL 中 2>&1 重定向的问题
举报原因:
原因补充:

(最多只允许输入30个字)