Linux shell I/O 重定向

Linux shell中的File Descripter可以理解为一个指向文件的指针。默认有三个FD:0,1,2。分别指向的是:Keyboard设备文件,Moniter设备文件,和Moniter设备文件。
Shell中还允许有3..9的FD,默认都没有打开,可以认为指向的为null。
可以通过一下命令查看得开的FD:
ls /proc/self/fd
返回的数字代表FD的值。
利用重定向可以为一个FD赋值,使其指向一个非null的文件,其实就是打开一个FD。
6>&1
可以理解为将FD6指针指向FD1指针指向的文件,既Moniter。这样,FD6和FD1就同时指向同一个文件:Moniter。
6>&-
可以理解为将FD6指针置为空值null,即关闭FD6。
一个重定向只在当前命令中有效。用过exec可以是IO重定向在当前shell中长期有效。
通过类似指针的特性,I/O重定向可以用来保存当前某个FD并在其后恢复。例如:
过滤stderr中的内容,屏蔽含有字符串“unused”的错误输出:

# 创建FD6,指向FD1指向的moniter。
exec 6>&1
# 运行command命令,将stdout重定向给FD6,再将stderr重定向给stdout。
# 这时,command有两个输出FD,
# 分别是FD1和FD6,FD1是错误信息,FD6是标准输出内容。
# 再将FD1错误信息通过pipe传给grep进行过滤,并将过滤后的内容重定向给FD2。
# 最后,将之前的FD6的内容重定向给FD1。
# 这样,这条命令有两个输出,FD1是command的标准输出内容,
# FD2是经过过滤的command的错误输出。
(command 2>&1 >&6 | grep -v unused >&2) 6>&1
# 关闭FD6。
exec 6>&-

转载:http://blog.sina.com.cn/s/blog_9599e95101019e4n.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值