自动计时每个执行的命令并在Bash提示符中显示?

16

我经常会忘记在执行命令时显式地添加 "time" 命令前缀,理想情况下,我希望在下一个shell提示符中看到上一个命令所花费的实际时间(每个命令都要显示)。

我已经查阅了bash文档,但没有找到相关内容。


3
这是一个适合在Unix/Linux Stackexchange上提问的好问题。 - Flimm
2个回答

13

你可以这样做:

$ 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'

(类似于我在这里的回答。)


2
太好了,谢谢!(抱歉回复晚了) - mark

12

另一个stackoverflow的线程涵盖了基本相同的问题。 我在那个线程中的答案可以总结如下:

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)) # '

去除前导空值后的"Ddays,HH:MM:SS"格式。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接