【问题标题】:bash: "time time cmd" is not working after updatebash:“time time cmd”在更新后不起作用
【发布时间】:2013-10-10 14:30:02
【问题描述】:

我刚刚更新了我的 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 的带有页面错误统计信息的附加信息。然后是 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%4089a92869e56aba4e4cab2d639c00a86f0545c862

【问题讨论】:

  • 如果使用它的完整路径呢?
  • 没关系 (/usr/bin/time),但我想使用 time time。我认为,bash 4.2 中的 parse.y 中存在错误 ...:code.metager.de/source/diff/gnu/bash/… 可能在 TIMEOPT/TIMEIGN 附近
  • 做个别名怎么样? alias time='time /usr/bin/time' -- 然后你只需要写一次。
  • 您为什么不直接为/usr/bin/time 创建一个格式,它会以您想要的格式准确生成您想要的信息,然后将t 之类的别名作为调用的别名?我没有看到内置时间给你的/usr/bin/time 格式字符串不会。
  • 您从哪些版本的bash 升级到了哪些版本? (虽然我倾向于同意 rici:只需设置TIME 环境变量以包含您想要的信息,您可以使用\time cmd 快速访问被bash 关键字@ 遮蔽的外部time 程序987654347@).

标签: bash time


【解决方案1】:

我不知道为什么这种行为在 bash 中发生了变化,但经过一番思考后,我对如何将其恢复到原来的方式提出了建议。

正如我在 cmets 中所建议的,最简单的方法是创建别名:

alias time='time /usr/bin/time'

但这会改变每次使用“双倍时间”的行为。我开始认为您可能想要指定它两次。当然,您可以将别名重命名为 timetime 并完成它。但如果这还不够好,您可以通过向启动脚本添加函数和别名来恢复旧行为:

mytime() {
    if [ "$1" = "time" ]; then
        shift
        time /usr/bin/time $@
    else
        time $@
    fi
}
alias time=mytime

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-17
    • 1970-01-01
    • 1970-01-01
    • 2016-11-22
    • 1970-01-01
    • 1970-01-01
    • 2011-08-30
    相关资源
    最近更新 更多