`
cloudtech
  • 浏览: 4593777 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

输入输出重定向

 
阅读更多

有时候,从文件接受输入或将结果送到文件中去是很有用的。在这种情况下,在编写命令时,增加文件名作为附加的或可选的参数是能做到的,一些命令也是这样做的。但是,如果每条命令都要增加这些并不常用的功能,将会必要的增加命令的执行文件的长度。为了避免这样做。Linux和shell一起提供了重新定向的功能。

(1)在必要时,允许将程序的标准输入和输出进行重新定向。如:

$ls -l /usr/tmp >dir

这一命令的前半部分产生/usr/tmp目录的长清单。在正常情况下,在屏幕上显示清单。在命令后面跟以大于号(>)和文件名时,清单将送到指定的文件中,而不在屏幕上显示清单。使用这种功能重新定向时,如果指定的文件不存在,将建立这一文件。若存在,原有内容被覆盖。可以这样验证:

$cat dir

ls命令并不知道>符号的特殊功能。事实上,ls命令甚至不知道>符号的存在。因为shell将任何命令行参数送给ls命令以前已将>符号和后面的文件名称移去。ls命令执行时像往常一样将他的输出送到标准输出设备。由shell在ls命令执行之前将他的输出从屏幕重新定向到指定的文件。其他重新定向功能也是类似的。

(2)有时候,希望使用输出重新定向功能,将另一条命令输出的结果追加到已有的文件的后面。这时候,可以使用追加重新定向操作符(>>).如:

ls /usr/tmp >>dir

(3)程序的错误输出也可以重新定向。程序的标准输出和错误输出通常作为两件不同的事情对待,可以对它们分别进行重新定向。可以用下面的命令:

$ ls /usr/tmp 2>err.file

(4)使用符号2>(或追加符号2>>)表示对错误输出设备重新定向。

(5)为了将标准输出和错误输出同时送到统一文件中,可以:

$ls /usr/tmp &>output.file

(6)标准输入也可以独自文件,而不是从键盘输入。:

$wc </etc/passwd

shell处理小于符号后面的部分,wc命令看不到文件名 /etc/passwd ,它像不包括文件名一样,认为输入来自键盘。

(7)另一种重新定向称为here文档。它告诉shell当前命令的标准输入来自命令行。here文档的重新定向操作符为(<<).

$wc <<delim

>ldllfldsfldjlfl;ld

>ldlfl;dflldl

在<<操作符后面,任何字符都可以用做正文开始前的分隔符,本例使用delim作为分隔符。here文档的正文一直继续到遇到另一个分隔符为止。第二个分隔符应出现在新行的开头。这时here文档的正文,不包括开始和结束的分隔符,将重新定向送给命令,作为他的标准输入。

(8)组合新功能

例如,统计目录中文件数目:

$ls /usr/bin >/tmp/dir

$wc -w </tmp/dir

459

$rm /tmp/dir

kaishishiyongls命令列出/usr/bin目录的内容,将结果重新定向送给/tmp/dir文件。第二条命令对ls输出文件的字数进行统计,并显示总数459.在结束时,将在/tmp 目录下建立的临时文件删去。这样做不至于因为忘记而浪费此旁空间。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics