I am LAZY bones? AN ancient AND boring SITE

2008年 01月 07日 的归档

一个关于time的有意思的问题

原帖: http://forum.ubuntu.org.cn/viewtopic.php?p=591866
问:
目的:用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文件)会不同?

谢谢!

答:
又是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