`

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

 
阅读更多
转载http://blog.csdn.net/pastgift/article/details/6992092

#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

分享到:
评论

相关推荐

    Linux 命令 shell 重定向 >

    Linux 命令 shell 重定向 > 1、清空内容两种方式: cat /dev/null > filename > filename 2、清空文件内容,将显示结果重定向到文件 echo “this is a test” > filename 3、输入输出流组合 0:标准输入 1:标准...

    linux shell 中 2>1的含义

    linux shell 中”2>&1″的含义 脚本: nohup /mnt/Nand3/H2000G >/dev/null 2>&1 & 对于& 1 更准确的说应该是文件描述符 1,而1 一般代表的就是STDOUT_FILENO,实际上这个操作就是一个dup2(2)调用.他标准输出到all_...

    编的一个linux Shell ,能实现管道,重定向,以及一些基本的Shell 编程功能.zip

    编的一个linux Shell ,能实现管道,重定向,以及一些基本的Shell 编程功能.zip

    Linux Shell编程从初学到精通 第2版

    第1章 Shell脚本编程概述 1 第2章 Linux文件系统和文本编辑器 12 第3章 正则表达式 43 第4章 sed命令和awk编程 64 第5章 文件的排序、合并和分割 105 第6章 变量和引用 133 第7章 退出、测试、判断及操作符 ...

    Shell的使用及管道与重定向

    Linux的"旺火"烧得已有三、四年了,但对照Windows的应用普及程度,根本还未在一个数量级上,说到底,这"旺火"中有很大程度的"虚火",使用Linux在现在还大有阳春白雪之意。Linux是一块宝玉,但在一般人眼中,它的安装...

    linux shell数据重定向(输入重定向与输出重定向)详细分析

    主要介绍了linux shell数据重定向(输入重定向与输出重定向)详细分析,需要的朋友可以参考下

    cmd命令行.TXT

    4、>> 重定向符 5、<、>&、<& 重定向符 6、| 命令管道符 7、^ 转义字符 8、& 组合命令 9、&& 组合命令 10、|| 组合命令 11、"" 字符串界定符 12、, 逗号 13、; 分号 14、() 括号 15、! 感叹号

    有管道重定向功能的shell命令解释器(内含flex安装包)

    您或许听过这样的论调:命令行(the mommand line)早就已经过时...这是因为,在 Unix 中,shell 可不是简单的命令解释器(典型的有 Windows 中的 DOS ),而是一个全功能的编程环境。 下面我们实现一个简单的命令解释器

    新版Linux Shell编程实训(全)20170518.docx

    8.1.1 Shell中函数的定义 147 8.1.2 函数参数 150 任务8.2 Shell案例 151 8.2.1 指定多个文件的行数 151 8.2.2 当前目录的所有文件 153 练习(每题50分,共计100分) 156 项目九 Shell输入/输出重定向 158 [学习目标...

    LINUX Shell 输入-输出重定向.pdf

    linux

    linux shell C语言实现

    C语言编程实现了linux的shell功能,包括多管道,父子进程,输入输出重定向以及简单的纠错功能。另外还有详细的word说明文档及图片,介绍了程序执行情况和各个函数说明。(好吧,坦白说了吧,这是我上linux课程是一次...

    Linux+Shell命令行及脚本编程实例详解-刘艳涛.mobi kindle版

    Linux及Linux Shell简介、初识Linux Shell、常用Shell(Bash)命令、Shell命令进阶、Shell编程基础、Shell的条件执行、Bash循环、Shell函数、正则表达式、脚本输入处理、Shell重定向、管道和过滤器、捕获、sed和awk...

    shell脚本中取消重定向的方法实例

    在上一篇关于shell编程的例子中,有讲到把shell脚本进行扩展之后重定向到一个文件中,以便进行查看和调试//www.jb51.net/article/62435.htm。但是,若是有另一种情况:只是在某些地方进行重定向,... exec 3>&1  exec

    大学生 linux实验 SHELL编程

    SHELL编程 shell环境编程Linux重定向与进程控制 linux基础实验报告

    Linux base shell重定向详解

    2(缺省是屏幕,为2时是文件)系统中实际上有12个文件描述符,我们可以任意使用文件描述符3到9. 标准输入:从键盘输入数据,即从键盘读入数据。标准输出:把数据输出到终端上。标准错误输出:把标准错误输出到终端上。...

    vim编辑器中掌握输入输出重定向与管道命令的应用

    在shell中,要实现重定向主要依靠重定向符,即shell是检查命令行中有无重定向符来决定是否需要实施重定向。下表列出了常用的重定向符。 2.使用管道 许多Linux命令具有过滤特性,即一条命令通过标准输入端口接收一个...

    北邮linux开发环境实验报告

    是北京邮电大学计算机科学与技术大三选修课,linux开发环境实验报告 Shell管道和重定向功能的实现 生成TCP活动状况报告

    Linux详细教程大全之shell脚本基础4-管道IO重定向等.docx

    Linux详细教程大全之shell脚本基础4-管道IO重定向等

    Linux shell 编程

    本书共分五部分,详细介绍了shell编程技巧,各种UNIX命令及语法,还涉及了UNIX下的文字处理以及少量的系统管理问题。本书内容全面、文字简洁流畅,适合Shell编程人员学习、参考。 目 录 译者序 前言 第一部分 shell...

Global site tag (gtag.js) - Google Analytics