我刚刚更新了我的bash,现在我无法使用在更新前工作正常的time time
命令。
time time cmd
的想法是:第一个time
是bash内置函数,第二个time
是/usr/bin/time
程序。 cmd
是要定时的计划。
使用time time
简短易记,可以看到精细打印的用户/系统/实时和页面错误统计信息:
$ time time false
Command exited with non-zero status 1
0.00user 0.00system 0:00.01elapsed 0%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (1major+163minor)pagefaults 0swaps
real 0m0.035s
user 0m0.000s
sys 0m0.002s
第一行是cmd的退出状态(如果非零),第二行是来自/usr/bin/time
的紧凑时间统计,第三行是来自/usr/bin/time
的具有pagefault统计数据的附加信息。然后有来自bash time
的三行,有更详细的时间信息(点后3位)。
问题是:为什么较新的bash会将第二个time
忽略为/ usr / bin / time?改变了什么,为什么?
如何修补bash以返回旧式的解析时间?
我认为bash的parse.y
是bison文件的变化。这里是差异http://code.metager.de/source/diff/gnu/bash/parse.y?r2=%2Fgnu%2Fbash%2Fparse.y%40509a4430ae72aec10896713435e84f5b27675763&r1=%2Fgnu%2Fbash%2Fparse.y%4089a92869e56aba4e4cab2d639c00a86f0545c862
答案 0 :(得分:1)
我不知道为什么这种行为在bash中发生了变化,但经过一番思考后,我已经建议如何让它恢复原状。
正如我在评论中所建议的那样,最简单的方法是创建一个别名:
alias time='time /usr/bin/time'
但这会改变行为,每次都使用“双倍时间”。我开始认为你可能想要指定它两次。当然,你可以将别名重命名为timetime
并完成它。但是,如果仍然不够好,您可以通过向启动脚本添加函数和别名来恢复旧行为:
mytime() {
if [ "$1" = "time" ]; then
shift
time /usr/bin/time $@
else
time $@
fi
}
alias time=mytime
至少在我的电脑上,这很好用。