shell 标准输入与输出
2008-11-21 12:28
309 查看
from http://blog.csdn.net/ealpha/archive/2004/10/14/136092.aspx 标准输入与输出
执行一个Shell命令行时通常会自动打开3个标准文档,即标准输入文档(stdin),通常对应终端的键盘;标准输出
文档(stdout)和标准错误输出文档(stderr)都对应终端的屏幕。进程将从标准输入文档中得到输入资料,将正常输出资料输出到标准输出文档,而
将错误信息送到标准错误文档中。
我们以cat命令为例。cat命令的功能是从命令行给出的文件中读取资料,并将这些资料直接送到标准输出。若使用如下命令
# cat config
将会把文档config的内容依次显示到屏幕上。但是,如果cat的命令行中没有参数,它就会从标准输入中读取资料,并将其送到标准输出。例如:
# cat
Hello world
Hello world
Bye
Bye
用户输入的每一行都立刻被cat命令输出到屏幕上。
另一个例子,命令sort按行读入文档正文(当命令行中没有给出文件名时,表示从标准输入读入),将其排序,并将结果送到标准输出。下面的例子是从标准输入读入一个采购单,并将其排序。
# sort
bananas
carrots
apples
apples
bananas
carrots
这时我们在屏幕上得到了已排序的采购单。直接使用标准输入/输出文档存在以下问题:
输入资料从终端输入时,用户输入的资料只能用一次。下次再想用这些资料时就得重新输入。而且在终端上输入时,若输入有误修改起来不是很方便。输
出到终端屏幕上的信息只能看不能动。我们无法对此输出做更多处理,如将输出作为另一命令的输入进行进一步的处理等。为了解决上述问题,Linux系统为输
入、输出的传送引入了另外两种机制,即输入/输出重定向和管道。
1.输入重定向
输入重定向是指把命令或可执行程序的标准输入重定向到指定的文件中。也就是说,输入可以不来自键盘,而来自一个指定的文件。所以说,输入重定向
主要用于改变一个命令的输入源,特别是改变那些需要大量输入的输入源。例如,命令wc统计指定文档包含的行数、单词数和字符数。如果仅在命令行上键入:
# wc
wc将等待用户告诉它统计什么,这时Shell就好像死了一样,从键盘键入的所有文本都出现在屏幕上,但并没有什么结果,直至按下【Ctrl+
D】,wc才将命令结果显示在屏幕上。如果给出一个文档名作为wc命令的参数,如下例所示,wc将返回该文档所包含的行数、单词数和字符数。
# wc /etc/passwd
20 23 726 /etc/passwd
另一种把/etc/passwd文档内容传给wc命令的方法是重定向wc的输入。输入重定向的一般形式为:命令<文件名。可以用下面的命令把wc命令的输入重定向为/etc/passwd文件:
# wc < /etc/passwd
20 23 726
另一种输入重定向称为here文档,它告诉Shell当前命令的标准输入来自命令行。here文档的重定向操作符使用<<。它将一
对分隔符号(分隔符号是由<<符号后的单词来定义的,本例中我们用eof来表示)之间的正文作为标准输入定向给命令。下例将一对分隔符号
eof之间的正文作为wc命令的输入,统计出正文的行数、单词数和字符数。
[root@mail root]# wc << eof
> hello
> world
> are you here?
> eof
3 5 26
在<<操作符后面,任何字符或单词都可以作为正文开始前的分隔符号,本例中使用eof就作为分隔符号。here文档的正文一直延续
到遇见另一个分隔符号为止。第二个分隔符号应出现在新行的开头。这时here文档的正文(不包括开始和结束的分隔符号)将重新定向送给命令wc作为它的标
准输入。
由于大多数命令都以参数的形式在命令行上指定输入档的文件名,所以输入重定向并不经常使用。尽管如此,当要使用一个不接受档名作为输入参数的命令,而需要的输入内容又存在一个文档里时,就能用输入重定向解决问题。
执行一个Shell命令行时通常会自动打开3个标准文档,即标准输入文档(stdin),通常对应终端的键盘;标准输出
文档(stdout)和标准错误输出文档(stderr)都对应终端的屏幕。进程将从标准输入文档中得到输入资料,将正常输出资料输出到标准输出文档,而
将错误信息送到标准错误文档中。
我们以cat命令为例。cat命令的功能是从命令行给出的文件中读取资料,并将这些资料直接送到标准输出。若使用如下命令
# cat config
将会把文档config的内容依次显示到屏幕上。但是,如果cat的命令行中没有参数,它就会从标准输入中读取资料,并将其送到标准输出。例如:
# cat
Hello world
Hello world
Bye
Bye
用户输入的每一行都立刻被cat命令输出到屏幕上。
另一个例子,命令sort按行读入文档正文(当命令行中没有给出文件名时,表示从标准输入读入),将其排序,并将结果送到标准输出。下面的例子是从标准输入读入一个采购单,并将其排序。
# sort
bananas
carrots
apples
apples
bananas
carrots
这时我们在屏幕上得到了已排序的采购单。直接使用标准输入/输出文档存在以下问题:
输入资料从终端输入时,用户输入的资料只能用一次。下次再想用这些资料时就得重新输入。而且在终端上输入时,若输入有误修改起来不是很方便。输
出到终端屏幕上的信息只能看不能动。我们无法对此输出做更多处理,如将输出作为另一命令的输入进行进一步的处理等。为了解决上述问题,Linux系统为输
入、输出的传送引入了另外两种机制,即输入/输出重定向和管道。
1.输入重定向
输入重定向是指把命令或可执行程序的标准输入重定向到指定的文件中。也就是说,输入可以不来自键盘,而来自一个指定的文件。所以说,输入重定向
主要用于改变一个命令的输入源,特别是改变那些需要大量输入的输入源。例如,命令wc统计指定文档包含的行数、单词数和字符数。如果仅在命令行上键入:
# wc
wc将等待用户告诉它统计什么,这时Shell就好像死了一样,从键盘键入的所有文本都出现在屏幕上,但并没有什么结果,直至按下【Ctrl+
D】,wc才将命令结果显示在屏幕上。如果给出一个文档名作为wc命令的参数,如下例所示,wc将返回该文档所包含的行数、单词数和字符数。
# wc /etc/passwd
20 23 726 /etc/passwd
另一种把/etc/passwd文档内容传给wc命令的方法是重定向wc的输入。输入重定向的一般形式为:命令<文件名。可以用下面的命令把wc命令的输入重定向为/etc/passwd文件:
# wc < /etc/passwd
20 23 726
另一种输入重定向称为here文档,它告诉Shell当前命令的标准输入来自命令行。here文档的重定向操作符使用<<。它将一
对分隔符号(分隔符号是由<<符号后的单词来定义的,本例中我们用eof来表示)之间的正文作为标准输入定向给命令。下例将一对分隔符号
eof之间的正文作为wc命令的输入,统计出正文的行数、单词数和字符数。
[root@mail root]# wc << eof
> hello
> world
> are you here?
> eof
3 5 26
在<<操作符后面,任何字符或单词都可以作为正文开始前的分隔符号,本例中使用eof就作为分隔符号。here文档的正文一直延续
到遇见另一个分隔符号为止。第二个分隔符号应出现在新行的开头。这时here文档的正文(不包括开始和结束的分隔符号)将重新定向送给命令wc作为它的标
准输入。
由于大多数命令都以参数的形式在命令行上指定输入档的文件名,所以输入重定向并不经常使用。尽管如此,当要使用一个不接受档名作为输入参数的命令,而需要的输入内容又存在一个文档里时,就能用输入重定向解决问题。
相关文章推荐
- shell标准输入输出
- 2. 三. 标准输入/输出和重定向 (shell命令)
- Shell 标准输入、输出和错误
- 标准输入与输出(Shell命令)
- linux shell 编程笔记 - shell的输入与输出 -3- 标准输入-标准输出-标准错误
- 学习笔记 (Shell的标准输入/标准输出/标准错误) [第四课]
- shell脚本之重定向、标准输入、输出、错误输出的使用
- shell 标出输入、标准输出、错误输出
- 第八章 Shell标准输入、输出和错误
- shell从标准输出读取键盘输入
- Shell的文件描述符操作,包括标准输入,标准输出,自定义文件描述符
- C++语法基础--标准IO库--文件的输入和输出(fstream,ifstream,ofstream)
- shell基础五:输入和输出(echo,read,cat,管道,tee,重定向等)
- 重定向标准输入/输出
- 【C语言】编写一个程序从标准输入读取字符,并把他们写到标准输出。除了大写字母转换成小写字母之外,其他的原样输出。
- Linux标准输入,标准输出文件
- C语言 编写一个程序从标准输入读取字符,并把他们写到标准输出。除了大写字母转换成小写字母之外,其他的原样输出。
- 标准输入、输出和错误和文件重定向
- 【转】从Shell脚本内部将所有标准输出及标准错误显示在屏幕并同时写入文件的方法
- Linux把一个文件标准输出输入到另一个文件中