免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4767 | 回复: 6
打印 上一主题 下一主题

如何将 stderr 传递给管道右边 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-11-26 18:46 |只看该作者 |倒序浏览
我想知道如何将stderr 传递给管道右边,找到一种做法:

# cmd1  2>&1  > /dev/null  | cmd2

可是为什么?这怎么理解?



[root@vm1 ~]# ls install.log wl
ls: wl: 没有那个文件或目录
install.log

[root@vm1 ~]# ls install.log wl >/dev/null 2>&1 |wc -c      
0

[root@vm1 ~]# ls install.log wl  2>&1 > /dev/null |wc -c
36

[root@vm1 ~]# ls install.log wl 2>&1 1>/dev/null
ls: wl: 没有那个文件或目录

[root@vm1 ~]# ls install.log wl 2>&1 2>/dev/null
install.log

论坛徽章:
0
2 [报告]
发表于 2010-11-26 19:24 |只看该作者
就是把標準錯誤加到標準輸出上
[root@vm1 ~]# ls install.log wl 2>&1 1>/dev/null
ls: wl: 没有那个文件或目录
這個是因為 標準輸出 與標準錯誤輸出 都是打印在終端上的。。。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
3 [报告]
发表于 2010-11-26 22:06 |只看该作者
stderr打印的就是在屏幕上的。

论坛徽章:
2
技术图书徽章
日期:2013-10-30 14:37:252015年亚洲杯之伊朗
日期:2015-04-30 13:37:02
4 [报告]
发表于 2010-11-26 22:57 |只看该作者
这样。
  1. cmd > /dev/null | cmd2
复制代码
这里标准输出送到了/dev/null,而标准错误,则通过管道送给了下一命令。

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
5 [报告]
发表于 2010-11-27 14:53 |只看该作者
你可以把标准错误重定向到标准输出上,使得指向同一个管道,但注意不要引起混淆。
如果可能要混淆,则可以用命名管道

论坛徽章:
0
6 [报告]
发表于 2010-11-29 12:13 |只看该作者
将stderr 传递给管道右边,找到一种可行的做法:

# cmd1  2>&1  > /dev/null  | cmd2

你们是怎么怎么理解的?

论坛徽章:
0
7 [报告]
发表于 2010-11-29 12:38 |只看该作者
# cmd1  2>&1  > /dev/null  | cmd2
2>&1  这个是说将标准错误输出(stderr, 就是那个2)定向到标准输出(stdout,就是那个1)
> /dev/null,将标准输出定向到/dev/null,就是抛弃了.结合上面一条就是将stderr和stdout都抛弃了.

| cmd2 应该不用解释了吧.就是将前面的输出的stdout 作为 cmd2的输入,但是这里已经没有任何输入了.由于前面的命令的输出都到/dev/null去了.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP