重定向stdin stdout stderr |
Posted 陈浩然MC
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了重定向stdin stdout stderr |相关的知识,希望对你有一定的参考价值。
在Linux下,当一个用户进程被创建的时候,系统会自动为该进程创建三个数据
流,也就是题目中所提到的这三个。那么什么是数据流呢(stream)?
我们知道,一个程序要运行,需要有输入、输出,如果出错,还要能表现出自身的错误。这是就要从某个地方读入数据、将数据输出到某个地方,这就够成了数据流。
执行一个shell命令行时通常会自动打开三个标准文件,即标准输入文件(stdin),通常对应终端的键盘;标准输出文件(stdout)和标准错误输出文件(stderr),这两个文件都对应终端的屏幕。进程将从标准输入文件中得到输入数据,将正常输出数据输出到标准输出文件,而将错误信息送到标准错误文件中。
[[email protected] ~]# cat config
将会把文件config的内容依次显示到屏幕上。但是,如果cat的命令行中没有参数,它就会从标准输入中读取数据,并将其送到标准输出。例如:
[[email protected] ~]# cat Hello world Hello world Bye Bye
PS:ctrl-d快捷,标准输入接收到EOF(结束)标识符
输入重定向
[[email protected] ~]# wc
wc将等待用户告诉它统计什么,这时shell就好象死了一样,从键盘键入的所有文本都出现在屏幕上,但并没有什么结果,直至按下ctrl+d,wc才将命令结果写在屏幕上。
[[email protected] ~]# wc /etc/passwd 24 30 1061 /etc/passwd
另一种把/etc/passwd文件内容传给wc命令的方法是重定向wc的输入。
[[email protected] ~]# ls > directory.out
[[email protected] ~]# ls *.doc>>directory.out
[[email protected] ~]# cat directory.out
ch1.doc ch2.doc ch3.doc chimp config mail/ test/
和程序的标准输出重定向一样,程序的错误输出也可以重新定向。使用符号2>(或追加符号2>>)表示对错误输出设备重定向。例如下面的命令:
[[email protected] ~]# ls /usr/tmp 2> err.file
可在屏幕上看到程序的正常输出结果,但又将程序的任何错误信息送到文件err.file中,以备将来检查用
[[email protected] ~]# ls /usr/tmp &> output.file
利用重定向将命令组合在一起,可实现系统单个命令不能提供的新功能。例如使用下面的命令序列:
[[email protected] ~]# ls /usr/bin > /tmp/dir [[email protected] ~]# wc -w < /tmp/dir 615
统计了/usr/bin目录下的文件个数。
1、使用"2>&1" 把标准错误stderr重定向到标准输出stdout;
2、使用"&>"把标准错误stderr重定向到标准输出stdout;
管 道
[[email protected] ~]# ls /usr/bin|wc -w 615
再如:
[[email protected] ~]# cat sample.txt|grep "High"|wc -l
管道将cat命令(列出一个文件的内容)的输出送给grep命令。grep命令在输入里查找单词High,grep命令的输出则是所有包含单词High的行,这个输出又被送给wc命令,wc命令统计出输入中的行数。假设sample.txt文件的内容如下:
命令替换
[[email protected] ~]# cd `pwd`
该命令将pwd命令列出的目录作为cd命令的参数,结果仍然是停留在当前目录下
以上是关于重定向stdin stdout stderr |的主要内容,如果未能解决你的问题,请参考以下文章
如何在使用os.execl替换进程时重定向stdin / stdout / stderr
scripts: stdin, stdout和stderr的重定向的解释
shell基础02 标准文件描述符STDIN,STDOUT,STDERR和输入输出重定向