1

我刚刚更新了我的 bash,现在我无法使用time time在更新之前运行良好的命令。

思路time time cmd是:一是timebash内置函数,二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 的退出状态(如果非零),第二行是来自 的紧凑时间统计,第三行是来自pagefault 统计/usr/bin/time的附加信息。/usr/bin/time然后是 bash 的三行,time其中包含更详细的时间信息(点后 3 位数字)。

问题是:为什么较新的 bash 会忽略第二个time/usr/bin/time?发生了什么变化,为什么?

如何修补 bash 以返回旧式的解析时间?

我认为bash的parse.y野牛文件发生了变化。这里的差异http://code.metager.de/source/diff/gnu/bash/parse.y?r2=%2Fgnu%2Fbash%2Fparse.y%40509a4430ae72aec10896713435e84f5b27675763&r1=%2Fgnu%2Fbash%2Fparse.y%4089a92869e506aba4efcab054563

4

1 回答 1

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

至少在我的电脑上,这工作正常。

于 2013-10-10T16:32:14.220 回答