转载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 重定向 > 1、清空内容两种方式: cat /dev/null > filename > filename 2、清空文件内容,将显示结果重定向到文件 echo “this is a test” > filename 3、输入输出流组合 0:标准输入 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
第1章 Shell脚本编程概述 1 第2章 Linux文件系统和文本编辑器 12 第3章 正则表达式 43 第4章 sed命令和awk编程 64 第5章 文件的排序、合并和分割 105 第6章 变量和引用 133 第7章 退出、测试、判断及操作符 ...
Linux的"旺火"烧得已有三、四年了,但对照Windows的应用普及程度,根本还未在一个数量级上,说到底,这"旺火"中有很大程度的"虚火",使用Linux在现在还大有阳春白雪之意。Linux是一块宝玉,但在一般人眼中,它的安装...
主要介绍了linux shell数据重定向(输入重定向与输出重定向)详细分析,需要的朋友可以参考下
4、>> 重定向符 5、<、>&、<& 重定向符 6、| 命令管道符 7、^ 转义字符 8、& 组合命令 9、&& 组合命令 10、|| 组合命令 11、"" 字符串界定符 12、, 逗号 13、; 分号 14、() 括号 15、! 感叹号
您或许听过这样的论调:命令行(the mommand line)早就已经过时...这是因为,在 Unix 中,shell 可不是简单的命令解释器(典型的有 Windows 中的 DOS ),而是一个全功能的编程环境。 下面我们实现一个简单的命令解释器
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
C语言编程实现了linux的shell功能,包括多管道,父子进程,输入输出重定向以及简单的纠错功能。另外还有详细的word说明文档及图片,介绍了程序执行情况和各个函数说明。(好吧,坦白说了吧,这是我上linux课程是一次...
Linux及Linux Shell简介、初识Linux Shell、常用Shell(Bash)命令、Shell命令进阶、Shell编程基础、Shell的条件执行、Bash循环、Shell函数、正则表达式、脚本输入处理、Shell重定向、管道和过滤器、捕获、sed和awk...
在上一篇关于shell编程的例子中,有讲到把shell脚本进行扩展之后重定向到一个文件中,以便进行查看和调试//www.jb51.net/article/62435.htm。但是,若是有另一种情况:只是在某些地方进行重定向,... exec 3>&1 exec
SHELL编程 shell环境编程Linux重定向与进程控制 linux基础实验报告
2(缺省是屏幕,为2时是文件)系统中实际上有12个文件描述符,我们可以任意使用文件描述符3到9. 标准输入:从键盘输入数据,即从键盘读入数据。标准输出:把数据输出到终端上。标准错误输出:把标准错误输出到终端上。...
在shell中,要实现重定向主要依靠重定向符,即shell是检查命令行中有无重定向符来决定是否需要实施重定向。下表列出了常用的重定向符。 2.使用管道 许多Linux命令具有过滤特性,即一条命令通过标准输入端口接收一个...
是北京邮电大学计算机科学与技术大三选修课,linux开发环境实验报告 Shell管道和重定向功能的实现 生成TCP活动状况报告
Linux详细教程大全之shell脚本基础4-管道IO重定向等
本书共分五部分,详细介绍了shell编程技巧,各种UNIX命令及语法,还涉及了UNIX下的文字处理以及少量的系统管理问题。本书内容全面、文字简洁流畅,适合Shell编程人员学习、参考。 目 录 译者序 前言 第一部分 shell...