【发布时间】:2010-11-13 15:59:36
【问题描述】:
我经常碰巧忘记用“time”命令显式地为执行添加前缀,理想情况下,我会在下一个 shell 提示符中看到最后一个命令(在每个命令上)花费了多少实时。
我已经浏览了 bash 文档,但找不到任何相关内容。
【问题讨论】:
-
这是 Unix/Linux Stackexchange 的一个好问题。
我经常碰巧忘记用“time”命令显式地为执行添加前缀,理想情况下,我会在下一个 shell 提示符中看到最后一个命令(在每个命令上)花费了多少实时。
我已经浏览了 bash 文档,但找不到任何相关内容。
【问题讨论】:
你可以这样做:
$ bind '"\C-j": "\C-atime \C-m"'
或者把这个放在你的~/.inputrc:
"\C-j": "\C-atime \C-m"
然后,当您想要执行 time sleep 1 时,您可以输入 sleep 1 并按 Ctrl+J 而不是 Enter。
我不建议在绑定命令(或 .inputrc 文件)中交换 j 和 m。每次按 Enter 时,都会添加 time,这可能会很烦人,并且在键入多行命令时会导致错误。
您可以将其添加到您的 ~/.bashrc 以使 time 的输出更紧凑:
export TIMEFORMAT='r: %R, u: %U, s: %S'
(类似于我的回答here。)
【讨论】:
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" 删除了前导空值。
【讨论】: