一个关于time命令的奇怪问题

sh/bash/dash/ksh/zsh等Shell脚本
回复
cxdream
帖子: 30
注册时间: 2006-05-26 13:22
送出感谢: 0
接收感谢: 0

一个关于time命令的奇怪问题

#1

帖子 cxdream » 2008-01-07 3:00

目的:用time命令来获得一个程序p执行的时间。


方法一:如果在终端命令符$下直接输入 $time p 2>foo.tmp
则可得到下面的foo.tmp内容
real 0m1.017s
user 0m0.916s
sys 0m0.056s

方法二:现在想用下面这个shell代码来执行这个命令
#!/bin/sh
。。。
。。。
time p 2>foo.tmp
。。。

但是执行完这个shell代码后查看foo.tmp的内容,却是这样的:
0.81user 0.06system 0:01.01elapsed 86%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (0major+723minor)pagefaults 0swaps

问题:我想知道为什么这两种方法得到的结果(foo.tmp文件)会不同?

谢谢!
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙
送出感谢: 4 次
接收感谢: 256 次

#2

帖子 eexpress » 2008-01-07 7:24

试试 &>foo
没事作这研究。 :lol:
● 鸣学
头像
bones7456
论坛版主
帖子: 8495
注册时间: 2006-04-12 20:05
来自: 杭州
送出感谢: 0
接收感谢: 8 次
联系:

#3

帖子 bones7456 » 2008-01-07 9:17

又是ubuntu的bash和dash的差异引起的问题,呵呵.

首先,time关键字是bash或者dash的保留字,就是说每个shell有不同的表现属于正常现象.
其次,ubuntu默认的用户打开终端以后用的是bash,所以这个时候输出是
real 0m1.017s
user 0m0.916s
sys 0m0.056s
这样的.但是ubuntu的 /bin/sh 指向的确实dash,这点可以通过 ls -l /bin/sh 来确认.就是系统是调用dash来执行你的脚本的,所以有了另一种形式的输出.

知道原因以后,如果你想在脚本里面也得到之前的那种输出,可以用以下两种方法:
1.把/bin/sh指向bash
2.脚本开头写成 #!/bin/bash
关注我的blog: ε==3
guocb
帖子: 20
注册时间: 2008-01-10 0:02
送出感谢: 0
接收感谢: 0

#4

帖子 guocb » 2008-01-10 0:07

这种问题确实比较多,而且比较烦人
回复

回到 “Shell脚本”