Chinaunix首页 | 论坛 | 博客
  • 博客访问: 128531
  • 博文数量: 62
  • 博客积分: 1476
  • 博客等级: 上尉
  • 技术积分: 662
  • 用 户 组: 普通用户
  • 注册时间: 2009-12-03 16:38
文章分类

全部博文(62)

文章存档

2010年(14)

2009年(48)

我的朋友

分类: LINUX

2009-12-23 20:24:59

如果谈到I/O重定向,就涉及到文件标识符(File Descriptor)的概念, 在Linux系统中,系统为每一个打开的文件指定一个文件标识符以便系统对文件进行跟踪,这里有些和C语言编程里的文件句柄相似,文件标识符是一个数字,不同数字代表不同的含义,默认情况下,系统占用了3个,分别是0标准输入(stdin),1标准输出(stdout), 2标准错误(stderr), 另外3-9是保留的标识符,可以把这些标识符指定成标准输入,输出或者错误作为临时连接。通常这样可以解决很多复杂的重定向请求。

#ls /dev &>filename
"&"在这里代表标准输出stdout和标准错误stderr,这里无论是正常输出还是错误信息都写到filename中了。

重新定义标准输入,输出,和错误的文件标识符

重新定义文件标识符可以用i>&j命令,表示把文件标识符i重新定向到j,你可以把"&"理解为"取地址"

请看以下例子
#exec 5>&1
表示把文件标识符5定向到标准输出,这个命令通常用来临时保存标准输入。

同样标准输入也是可以重新定向的,请参考下面例子
# grep search-word 一般来说grep命令在给定文件中搜索字符串,以上命令把文件filename作为grep命令的标准输入,而不是从键盘输入


#echo 123456789 >filename 把字符串写到文件filename中
#exec 3<>filename 把文件filename打开,并指定文件标识符为3
#read -n 4 <&3 从文件中读4个字符,句柄已经指到第四个字符末尾
#echo -n . >&3 在第5个字符处写一个点,覆盖第5个字符,-n表示不换行
#exec 3>&- 关闭文件标识符3

现在cat filename文件的结果就成了1234.6789

命令j<>filename表示把文件打开,并指明文件标识符为j
"&-"表示关闭文件标识符

有关关闭文件标识符的操作请参考下面n<&- 关闭输入文件标识符n
0<&-或<&- 关闭标准输入stdin
n>&- 关闭输出文件标识符n
1>&-或>&-关闭标准输出stdout



另外还有一些其他命令,如下参考2.
:> filename 或者 > filename

表示把文件filename设置成空,也就是清空文件内容,如果文件不存在,则创建一个空文件,(等同于touch命令) :表示一个空输出,两个命令的唯一区别就是>filename不是在所有shell都可以正常工作的。
阅读(487) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~