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

发布于 2024-07-27 23:17:30 字数 116 浏览 5 评论 0原文

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

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

I often happen to forget to explicitly prefix executions with the "time" command, ideally I would see in the next shell prompt how much real time the last command took (on every command).

I already scoured through the bash documentation, but couldn't find anything related.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

茶底世界 2024-08-03 23:17:30

您可以这样做:

$ 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 时,您都会添加时间,这可能非常烦人,并且在键入多行命令时会导致错误。

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

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

类似于我的答案 此处。)

You could do this:

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

Or put this in your ~/.inputrc:

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

Then when you want to do time sleep 1 you'd type sleep 1 and press Ctrl+J instead of Enter.

I would not recommend swapping the j and m in the bind command (or in the .inputrc file). Every time you'd press Enter you'd get time added which could be pretty annoying and would cause errors when typing a multi-line command.

You could add this to your ~/.bashrc to make the output of time more compact:

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

(similar to my answer here.)

云雾 2024-08-03 23:17:30

另一个 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”,删除前导空值。

Another stackoverflow thread covers the essentially the same question. My answer in that thread can be summarized as:

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

...to display the number of seconds as an integer, or:

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" with leading empty values removed.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文