Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2877803
  • 博文数量: 471
  • 博客积分: 7081
  • 博客等级: 少将
  • 技术积分: 5369
  • 用 户 组: 普通用户
  • 注册时间: 2012-01-04 21:55
文章分类

全部博文(471)

文章存档

2014年(90)

2013年(69)

2012年(312)

分类: LINUX

2013-02-24 16:57:19

一、标准输入输出-重定向

一个shell 命令执行了:屏幕也是一个文件

先有一个输入:输入可以从键盘,也可以从文件得到

命令执行完成:成功了,会把成功结果输出到屏幕:standard output默认是屏幕

命令执行有错误:会把错误也输出到屏幕上面:standard error默认也是指的屏幕


这些默认的输出,输入都是linux系统内定的,我们在使用过程中,有时候并不希望执行结果输出到屏幕。我想输出到文件或其它设备。这个时候我们就需要进行输出重定向了。

linux shell下常用输入输出操作符是:

1.  标准输入   (stdin) :代码为 0 ,使用 < 或 << ; /dev/stdin -> /proc/self/fd/0   0代表:/dev/stdin
2.  标准输出   (stdout):代码为 1 ,使用 > 或 >> ; /dev/stdout -> /proc/self/fd/1  1代表:/dev/stdout
3.  标准错误输出(stderr):代码为 2 ,使用 2> 或 2>> ; /dev/stderr -> /proc/self/fd/2 2代表:/dev/stderr 


注意:

1、shell遇到”>”操作符,会判断右边文件是否存在,如果存在就先删除,并且创建新文件。不存在直接创建。 无论左边命令执行是否成功。右边文件都会变为空。

2、“>>”操作符,判断右边文件,如果不存在,先创建。以添加方式打开文件,会分配一个文件描述符[不特别指定,默认为1,2]然后,与左边的标准输出(1)或错误输出(2) 绑定。

3、当命令:执行完,绑定文件的描述符也自动失效。0,1,2又会空闲。

4、一条命令启动,命令的输入,正确输出,错误输出,默认分别绑定0,1,2文件描述符。

5、一条命令在执行前,先会检查输出是否正确,如果输出设备错误,将不会进行命令执行

1、以> (1>)改变标准输出


#echo "redirect to the hellofile." 1> ./hello.txt

#cat hello.txt 
 redirect to the hellofile.


2、以<(0<)改变标准输入


#cat ./hello.txt >./hello2.txt 

redirect to the hellofile.

3、>>追加文件

# cat ./hello.txt >> ./hello2.txt

cat hello2.txt 
redirect to the hellofile.

redirect to the hellofile.


4、2>错误重定向

#cat ./notexit.txt  2> ./err.txt

#cat err.txt 
cat: ./notexit.txt: 没有那个文件或目录


然而常常是我们并不需要保存标准输出或是标准错误输出.我们可以使用UNIX中的/dev/null来忽略所有的错误输出.

# cat ./notexit.txt  > dev.null 2> /dev/null

没有任何输出

or  # cat ./notexit.txt  &> /dev/null

(&> )代表标准输出与错误输出


二、管道

管道符号,是unix功能强大的一个地方,符号是一条竖线:"|",用法: command 1 | command 2 他的功能是把第一个命令command 1执行的结果作为command 2的输入传给command 2,例如:

$ls -s|sort -nr|pg
该命令列出当前目录中的任何文档,并把输出送给sort命令作为输入,sort命令按数字递减的顺序把ls的输出排序。然后把排序后的 内容传送给pg命令,pg命令在显示器上显示sort命令排序后的内容。 


阅读(1689) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~