免费注册 查看新帖 |

Chinaunix

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

再问2>&1重定向的顺序问题 [复制链接]

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
21 [报告]
发表于 2007-11-30 11:10 |只看该作者
如果你确定是cmd的问题,查查cmd的手册看看有没有说明或是用个笨方法重定向到两个文件,再怎么组合自己就可以掌握了

论坛徽章:
0
22 [报告]
发表于 2007-11-30 11:22 |只看该作者
谢谢斑竹了!

论坛徽章:
0
23 [报告]
发表于 2007-12-03 09:44 |只看该作者
我在别的版本提问,为什么有人说和我执行了同样的操作却没我这个问题?
有懂rpm内部的原理的大大指教我一下么?

论坛徽章:
0
24 [报告]
发表于 2007-12-03 12:40 |只看该作者
在linuxsir也看到了你问的这个问题,出现这个问题是由于标准io库的原因,当标准输入输出不是终端等交互式设备时,就是全缓存的,写入的内容到一定数量才会真正写入文件,而标准出错是行缓存或者不带缓存,决不会是全缓存,所以会先写入文件。

论坛徽章:
0
25 [报告]
发表于 2007-12-03 13:02 |只看该作者
我在同一个系统上做如下动作,楼上的解释一下,这样为什么标准输出在标准错误之前,所以我觉得是RPM的问题
[root@localhost ~]# more aa.sh
#!/bin/sh

echo "hello!"
echo "chinaunix!"

sdsadasdas
[root@localhost ~]# ./aa.sh
hello!
chinaunix!
./aa.sh: line 6: sdsadasdas: command not found
[root@localhost ~]# ./aa.sh 1>err 2>&1
[root@localhost ~]# more err
hello!
chinaunix!
./aa.sh: line 6: sdsadasdas: command not found

论坛徽章:
0
26 [报告]
发表于 2007-12-03 13:21 |只看该作者
我说的是默认情况,在bash的源码中,可以看到bash把标准输出和标准出错都设置成了行缓存,所以会按顺序输出,而一般的应用程序并不会显示的设置标准输出和标准出错缓存类型,所以会导致错误先输出到文件中。你可以搜索一下bash的源代码,我们知道标准io库设置缓存类型是使用setvbuf函数的,在bash的源码文件夹下grep -r setvbuf *,你可以知道sh_setlinebuf这个函数,然后搜索sh_setlinebuf你会发现在shell的初始化中会调用这个函数,设置标准出错和标准输出的缓存类型为行缓存。
你的问题可以通过
script -q err cmd 来解决。

[ 本帖最后由 ocean390 于 2007-12-3 13:23 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP