Chinaunix首页 | 论坛 | 博客
  • 博客访问: 228684
  • 博文数量: 40
  • 博客积分: 2025
  • 博客等级: 大尉
  • 技术积分: 531
  • 用 户 组: 普通用户
  • 注册时间: 2009-09-25 17:47
文章分类

全部博文(40)

文章存档

2010年(8)

2009年(32)

我的朋友

分类: LINUX

2009-09-25 19:21:09

作者:good bai    

话说time是一个bash的保留字。别人这样讲,但是我没有看出来是为什么这样讲,经查time命令是time包中的一个文件。我不知道这样讲(保留字)的目的,但是运行测试,这个命令(time)的确有点特殊。

正常运行time命令:

[root@dy dic]# time sleep 5

real    0m5.001s
user    0m0.001s
sys    0m0.000s

我们重定向命令输出:

[root@dy dic]# time sleep 5 >out.txt

real    0m5.001s
user    0m0.002s
sys    0m0.001s
屏幕仍然输出,且out.txt文件为空,重定向失败。
使用time sleep 5 2>out.txt命令测试仍然无效。大概上面这个情况就是time成为bash保留字的理由,据说因为这个命令的一些特殊性,所以要求它要以一种 特殊的形式运行。那么我们该如何解决类似此种的号称为保留字的命令输出不可重定向的问题呢?

那天刚好看到了
如此介绍。因为time作为保留字的原因导致它按常规方式输出不可被重定向,我们可以通过让它运行在子shell(subshell)形态下,这样我们就可以正常的重定向它的输出了。
在console下,两种让命令运行在子shell的方式是给命令加小括号和加大括号。按这样最终实现如下:
1  ( time  sleep 5 ;) 2> out.txt
2 { time sleep 5;} 2>out.txt

注:time命令正常的输出是stderr(所以要在重定向是加2)。
经测试上面两种方式都有效。

附:
关于管道的资料可以参考bash的man手册中pipeline一节。
关于time的更多资料参考time的man手册
阅读(1735) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~