LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1209|回复: 10

请问如何将标准错误管道输送给另一个命令?

[复制链接]
发表于 2007-6-30 17:20:05 | 显示全部楼层 |阅读模式
想当然的以为是 &| 或 |&,
ls no &| wc -c
ls no |& wc -c
结果都是
bash: syntax error near unexpected token '|' 或 '&'
发表于 2007-6-30 18:14:35 | 显示全部楼层
管道的话直接 | 就可以的,如果是输出则是> 或者>>
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-6-30 20:18:36 | 显示全部楼层
不行啊:(  在当前目录没有no这个文件的时候:
ls no | wc -c
ls: no: No such file or directory
0
标准错误输出 ls: no: No such file or directory 没有输入到" wc -c "中呢
回复 支持 反对

使用道具 举报

发表于 2007-6-30 22:55:36 | 显示全部楼层
ls 2>&1
把标准错误放到标准输出.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-7-1 07:28:42 | 显示全部楼层
谢谢,那个是重定向,那管道呢?
回复 支持 反对

使用道具 举报

发表于 2007-7-1 08:59:05 | 显示全部楼层
好像管道只管标准输出吧.
想用管道就只能把它放到标准输出再用.
bash还提供一种直接把输出重定向给输入的方式

  1. $ls aaa 2> >(wc -c)
  2. 35
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-7-1 09:26:52 | 显示全部楼层
$ls aaa 2>> (wc -c)
bash: syntax error near unexpected token `('

还是 不行啊,看来只能先定向到标准输出了,谢谢

$ ls aaa 2>&1 | wc -c
35
回复 支持 反对

使用道具 举报

发表于 2007-7-1 09:55:11 | 显示全部楼层
楼主的意思是只把错误放入管道吗?试试这个
$ ls aaa 2>&1 >/dev/null | wc -l
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-7-1 10:25:26 | 显示全部楼层
呵呵,最开始我是想做类似这种事
$ sudo sh -c "strace echo aa > /dev/null" | grep write
但发现strace事实上是往标准错误打印信息,于是就想能不能直接将标准错误直接放入管道,忙乎了半天,发现没找到方法,只能先通过重定向,如:
$ sudo sh -c "strace echo aa > /dev/null" 2>&1 | grep write
回复 支持 反对

使用道具 举报

发表于 2007-7-1 22:47:12 | 显示全部楼层
> >之间要有空格, 并且第二个>跟括号之间不能有空格.
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表