LinuxSir.cn,穿越时空的Linuxsir!

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

如何重定向time的输出

[复制链接]
发表于 2006-4-9 23:04:33 | 显示全部楼层 |阅读模式
根据man里说的,time命令是将结果由标准出错输出,我现在想处理time一个命令的结果,不知该咋办。
标准time输出结果如下:

  1. $time dd if=/dev/hda of=512k.data bs=512 count=1024
  2. ...
  3. real    0m0.016s
  4. user    0m0.012s
  5. sys     0m0.004s
复制代码

试图用管道获取time输出,如下

  1. $time dd if=/dev/hda of=512k.data bs=512 count=1024 | grep user
  2. ...
  3. real    0m0.016s
  4. user    0m0.012s
  5. sys     0m0.004s
复制代码

正如一开始所说的,time是将结果输出到标准错误,所以上面的命令显然没有效果。
另外的尝试,试图将time的标准错误重定向到标准输出,然后交给grep处理:

  1. $time dd if=/dev/hda of=512k.data bs=512 count=1024 2>&1 | grep user
复制代码

结果仍然是

  1. ...
  2. real    0m0.029s
  3. user    0m0.012s
  4. sys     0m0.008s
复制代码

甚至,试图将time的结果输出到文件也失败

  1. $  time dd if=/dev/hda of=512k.data bs=512 count=1024 > result
  2. 1024+0 records in
  3. 1024+0 records out
  4. 524288 bytes (524 kB) copied, 0.014045 seconds, 37.3 MB/s

  5. real    0m0.019s
  6. user    0m0.000s
  7. sys     0m0.020s
  8. $ cat result
  9. $
  10. $  time dd if=/dev/hda of=512k.data bs=512 count=1024 > result 2>&1
  11. 1024+0 records in
  12. 1024+0 records out
  13. 524288 bytes (524 kB) copied, 0.012408 seconds, 42.3 MB/s

  14. real    0m0.017s
  15. user    0m0.004s
  16. sys     0m0.016s
  17. $ cat result
  18. 1024+0 records in
  19. 1024+0 records out
  20. 524288 bytes (524 kB) copied, 0.010668 seconds, 49.1 MB/s
复制代码

看结果,shell把dd的结果重定向了,但time的结果如何重定向?
我现在就想要time输出结果的user和sys那两行,那位朋友知道如何解决?
多谢指教
发表于 2006-4-9 23:57:24 | 显示全部楼层
{ time ls ;} 2>&1 | grep user
user    0m0.004s

当然,你要把 ls 的结果考虑进去。ls 也许返回带有 user 名字的文件。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-4-10 00:52:09 | 显示全部楼层
多谢
(论坛竟然不许小于6个字符的帖子;))
回复 支持 反对

使用道具 举报

发表于 2006-4-10 09:28:47 | 显示全部楼层
http://www.linuxsir.cn/bbs/showthread.php?t=169502
had pretty good examples about how to deal with time output.
回复 支持 反对

使用道具 举报

发表于 2006-4-10 16:49:24 | 显示全部楼层
很奇怪,/usr/bin/time就可以
比如:
$ /usr/bin/time ls >/dev/null 2>a
$ cat a
0.00user 0.00system 0:00.00elapsed 83%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (0major+319minor)pagefaults 0swaps
将看不到stderr的输出
但time不同
$ time ls >/dev/null 2>a

real    0m0.009s
user    0m0.005s
sys     0m0.004s
无法直接将stderr重定向到文件。
怀疑这是因为time是bash内置的命令。
回复 支持 反对

使用道具 举报

发表于 2006-4-10 23:44:02 | 显示全部楼层
time is not a shell builtin but a Keyword. It is a reserve word for bash.
回复 支持 反对

使用道具 举报

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

本版积分规则

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