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

mar*_*ark 12 bash time prompt

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

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

Pau*_*ce. 11

你可以这样做:

$ bind '"\C-j": "\C-atime \C-m"'
Run Code Online (Sandbox Code Playgroud)

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

"\C-j": "\C-atime \C-m"
Run Code Online (Sandbox Code Playgroud)

然后,当你想要time sleep 1输入时sleep 1,按Ctrl+ J而不是Enter.

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

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

export TIMEFORMAT='r: %R, u: %U, s: %S'
Run Code Online (Sandbox Code Playgroud)

(类似我的答案在这里.)

  • 太好了谢谢!(抱歉这么久才回复) (2认同)

wil*_*dye 8

另一个stackoverflow线程涵盖了基本相同的问题.我在该主题中的答案可归纳为:

trap 'SECONDS=0' DEBUG
export PS1='your_normal_prompt_here ($SECONDS) # '
Run Code Online (Sandbox Code Playgroud)

...以整数形式显示秒数,或者:

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)) # '
Run Code Online (Sandbox Code Playgroud)

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