【问题标题】:Automatically timing every executed command and show in Bash prompt? [duplicate]自动计时每个执行的命令并在 Bash 提示符下显示? [复制]
【发布时间】:2010-11-13 15:59:36
【问题描述】:

我经常碰巧忘记用“time”命令显式地为执行添加前缀,理想情况下,我会在下一个 shell 提示符中看到最后一个命令(在每个命令上)花费了多少实时。

我已经浏览了 bash 文档,但找不到任何相关内容。

【问题讨论】:

  • 这是 Unix/Linux Stackexchange 的一个好问题。

标签: bash time prompt


【解决方案1】:

你可以这样做:

$ bind '"\C-j": "\C-atime \C-m"'

或者把这个放在你的~/.inputrc:

"\C-j": "\C-atime \C-m"

然后,当您想要执行 time sleep 1 时,您可以输入 sleep 1 并按 Ctrl+J 而不是 Enter

我不建议在绑定命令(或 .inputrc 文件)中交换 jm。每次按 Enter 时,都会添加 time,这可能会很烦人,并且在键入多行命令时会导致错误。

您可以将其添加到您的 ~/.bashrc 以使 time 的输出更紧凑:

export TIMEFORMAT='r: %R, u: %U, s: %S'

(类似于我的回答here。)

【讨论】:

  • 太好了,谢谢! (抱歉这么久才回复)
【解决方案2】:

Another stackoverflow thread 涵盖了基本相同的问题。我在那个帖子中的回答可以总结为:

trap 'SECONDS=0' DEBUG
export PS1='your_normal_prompt_here ($SECONDS) # '

...将秒数显示为整数,或者:

seconds2days() { # convert integer seconds to Ddays,HH:MM:SS
    printf "%ddays,%02d:%02d:%02d" $(((($1/60)/60)/24)) \
    $(((($1/60)/60)%24)) $((($1/60)%60)) $(($1%60)) |
    sed 's/^1days/1day/;s/^0days,\(00:\)*//;s/^0//' ; }
trap 'SECONDS=0' DEBUG
PS1='other_prompt_stuff_here ($(seconds2days $SECONDS)) # '

..for "Ddays,HH:MM:SS" 删除了前导空值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-31
    • 2015-09-08
    • 1970-01-01
    相关资源
    最近更新 更多