免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: shaoping0330
打印 上一主题 下一主题

I/O重定向 详解及例子!  关闭 [复制链接]

论坛徽章:
0
31 [报告]
发表于 2005-04-05 07:59 |只看该作者

I/O重定向 详解及例子!

明白了,原来进入$()后fd1已经不是stdout,而是pipe了,这个pipe的输入是括号里面的fd4送它的(因为4>&1),输出就是ss。
没想到这一点。谢谢r2007!

论坛徽章:
0
32 [报告]
发表于 2005-05-10 10:51 |只看该作者

I/O重定向 详解及例子!

expert!!

论坛徽章:
1
寅虎
日期:2015-01-23 02:35:47
33 [报告]
发表于 2005-06-03 14:50 |只看该作者

I/O重定向 详解及例子!

原帖由 "shaoping0330" 发表:

    cmd >a 2>a :stdout和stderr都直接送往文件 a ,a文件会被打开两遍,由此导致stdout和stderr互相覆盖。
    cmd >a 2>&1 :stdout直接送往文件a ,stderr是继承了FD1的管道之后,再被送往文件a ?.........


cmd >> file 2>&1 把 stderr 和 stderr 一起重定向到 file 文件中
这句的第一个stderr应该是stdout吧?

论坛徽章:
0
34 [报告]
发表于 2005-07-25 08:56 |只看该作者

I/O重定向 详解及例子!

好~!

论坛徽章:
0
35 [报告]
发表于 2006-07-03 15:31 |只看该作者

还是不明白

对于26楼"li2002"兄提的问题,我还是不太明白.
首先,"r2007"版主的解释我看得明白,也认为解释合理.但是,"r2007"版主提供的改进的代码在我的机器上执行会报错"-bash: 4: Bad file descriptor"(我linux内核是2.4.20-20.9,shell版本是"GNU bash, version 2.05b.0(1)").因此提一个问题:FD除了0,1.2,需要使用的话是不是需要提前申明一下或者定义一下.

另外还有一个问题,让我奇怪的是楼主"shaoping0330"提供的代码反而能够执行,并能得到正确的结果.此处的疑问是既然前面有了语句"exec 4>&1",那就说明FD4已经指向了monitor,所以执行语句"echo $? >&4"的时候,应该是原本送到管道的内容现在送到FD4,也就是monitor.个人觉得哪怕是$()起了管道也还是如此,因为起了管道默认只影响FD1,不会影响FD4的呀.
当然就如同li2002所说的,我的理解肯定有误,但百思不得其解,请"r2007"版主或其他高手再次释疑.谢谢!

论坛徽章:
7
荣誉版主
日期:2011-11-23 16:44:17子鼠
日期:2014-07-24 15:38:07狮子座
日期:2014-07-24 11:00:54巨蟹座
日期:2014-07-21 19:03:10双子座
日期:2014-05-22 12:00:09卯兔
日期:2014-05-08 19:43:17卯兔
日期:2014-08-22 13:39:09
36 [报告]
发表于 2006-07-03 16:04 |只看该作者

exec 4>&1
换成
exec 4>tmplog
试一下
仔细想想到底是哪个 4>&1 在起作用?
另外楼上的出错信息,在我的系统没有出现
kernel 2.4.23

bash, version 2.05b.0

[ 本帖最后由 r2007 于 2006-7-3 16:11 编辑 ]

论坛徽章:
0
37 [报告]
发表于 2006-07-04 14:54 |只看该作者

再次请问

"r2007"版主您好,请问:
ss=$(((ls you no 2>&1 1>&3 3>&-;echo $? >&4)|egrep \* >file) 4>&1)
当$()启了管道以后,是不是4>&1的执行优先雨前面()里的命令,我觉得是4>&1优先的话,您的解释我就能理解了.
但是,命令应该是从左往右执行的吧,能解释一下吗?谢谢!

论坛徽章:
7
荣誉版主
日期:2011-11-23 16:44:17子鼠
日期:2014-07-24 15:38:07狮子座
日期:2014-07-24 11:00:54巨蟹座
日期:2014-07-21 19:03:10双子座
日期:2014-05-22 12:00:09卯兔
日期:2014-05-08 19:43:17卯兔
日期:2014-08-22 13:39:09
38 [报告]
发表于 2006-07-04 15:00 |只看该作者
((ls you no 2>&1 1>&3 3>&-;echo $? >&4)|egrep \* >file) 就相当于 cmd
所以可以看成这样
ss=$(cmd 4>&1)
其它依次类推

论坛徽章:
0
39 [报告]
发表于 2006-11-07 10:13 |只看该作者
楼主真是细心人!
佩服!

论坛徽章:
0
40 [报告]
发表于 2006-11-29 16:51 |只看该作者
顶楼主
终于明白了2>&1 1>/dev/null的含义
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP