为了比较不同外壳之间脚本的运行时间,一些SE答案建议使用bash
的内置 time
命令,如下所示:
time bash -c 'foo.sh'
time dash -c 'foo.sh'
... 等,每个要测试的外壳。这样的基准测试无法消除每个shell加载和初始化自身所花费的时间。例如,假设上述两种命令被存储在一缓慢的设备具有早期软盘的读取速度,(124KB /秒), dash
(一〜150K可执行程序)将加载大约7倍的速度比bash
(〜1M),所述壳加载时间会使time
数字产生偏差-这些外壳的预加载时间与加载foo.sh
外壳后测量每个外壳下的运行时间无关。
什么是可以在每个Shell中运行的用于脚本计时的最佳便携式和通用工具?因此,上面的代码如下所示:
bash -c 'general_timer_util foo.sh'
dash -c 'general_timer_util foo.sh'
注意:因为没有可移植的或通用的命令,所以没有外壳内置 time
命令。
更好的是,该实用程序还能够对Shell内部命令和管道所花费的时间进行基准测试,而无需用户先将它们包装在脚本中。这样的人工语法会有所帮助:
general_timer_util "while read x ; do echo x ; done < foo"
一些shell time
可以管理这个。例如bash -c "time while false ; do : ; done"
作品。要查看在您的系统上哪些有效(哪些无效),请尝试:
tail +2 /etc/shells |
while read s ; do
echo $s ; $s -c "time while false ; do : ; done" ; echo ----
done
/usr/bin/time
?