当前位置:  技术问答>linux和unix

求解惑,Linux管道和重定向

    来源: 互联网  发布时间:2017-03-23

    本文导语:  最近看到一篇关于管道的文章中有这样的描述: alias testcmd='command ls -ld / xxx ~/.bashrc yyy'  # swap stdout & stderr stream, i.e.   # let the stderr stream pass through a pipe while the stdout is printed to the terminal only   ...

最近看到一篇关于管道的文章中有这样的描述:

alias testcmd='command ls -ld / xxx ~/.bashrc yyy' 
# swap stdout & stderr stream, i.e.  
# let the stderr stream pass through a pipe while the stdout is printed to the terminal only  
# cf. http://tldp.org/LDP/abs/html/io-redirection.html:  
# "Child processes inherit open file descriptors. This is why pipes work. 
# To prevent an fd from being inherited, close it."  
(
exec 3>&1  
testcmd 2>&1 1>&3 3>&- | tr '[[:lower:]]' '[[:upper:]]' 3>&-   
exec 3>&-  
)

在我的RHEL上输出是这样的:
drwxr-xr-x 26 root  root 4096 Oct  7 22:37 /
-rw-r--r--  1 admin root  497 Aug 14 14:31 /home/admin/.bashrc
LS: XXX: NO SUCH FILE OR DIRECTORY
LS: YYY: NO SUCH FILE OR DIRECTORY

1>&3 3>&-这句,关闭3并不会导致1被block,由此可见,1>&3并不是一个套接的效果,而是一个赋值。也就是说,1->stdout, 运行1>&3之后,得到的是3->stdout,而不是1->3->stdout。那么问题是,2>&1 1>&3将导致1和2都指向stdout,bash如何鉴别谁需要进入管道?
我有一种猜想,就是因为有管道符的存在,所以testcmd 2>&1中的&1其实已经不再指stdout,而是作为tr命令的输入管道。大家觉得对么?元方,你怎么看?

|
重定向其实是个文件描述符dup的过程,以你的例子而言:

testcmd 1>>log 2>&1 
这个命令是先把log的文件描述符dup给fd1,此时fd1的文件表项指向的就是log文件,再把fd1 dup给fd2,这样fd2也指向了log文件

testcmd 2>&1 1>>log
这个命令先把fd1 dup给了fd2, 这样fd1和fd2的文件表项指向的都是终端设备,再把log的文件描术符dup给fd1,这样fd2仍然指向终端设备,fd1指向了log文件




    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 解惑的,请进!
  • 高手解惑!JAVA手机开发!
  • find 命令解惑
  • 答疑解惑之 syscall()
  • 新手有关Korn Shell问题,求解惑~
  • dlsym的疑惑,求解惑
  • 请高手们解惑,关于源代码
  • 新手做C/S结构程序时的困惑?高手解惑啊!!!!
  • 求大家帮我解惑,我在VMware上装Ubuntu 11.10没设置什么就装好了,这样正常吗?
  • 十万个为什么?高手解惑,拜托~~~
  • 才装WIN2000 WERVER版不久,立即面临一大堆总题,谁能替我解惑?
  • route配置问题,期待解惑
  • 100分+一颗诚心 期待netfilter Hook程序解惑 每天都在线,期待交流
  • [学习UNIX编程]初学UNIX编程,遇到一个小小的问题,烦劳大虾帮忙解惑,谢谢!
  • 请教一个"thinking in java "(第一版)333页上,Snake克隆的例子的问题。请看过的人,解惑。谢谢
  • dlopen 相关编译链接解惑
  • 深入Android线程的相关问题解惑


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3