首页
/ 在ble.sh中自定义命令执行耗时提示

在ble.sh中自定义命令执行耗时提示

2025-06-26 23:05:34作者:俞予舒Fleming

ble.sh是一个强大的Bash行编辑器扩展,它提供了许多增强功能来改善命令行体验。其中一个实用功能是exec_elapsed_mark,它会在命令执行后显示执行时间和CPU使用率。默认情况下,这个提示会同时显示执行的命令内容,但有时我们可能希望简化输出,只显示耗时信息。

默认行为分析

当启用exec_elapsed_mark选项时,ble.sh会在每个命令执行后输出类似如下的信息:

[ble: elapsed 4ms (CPU 100.0%)] true

这个输出包含三个部分:

  1. 耗时信息(elapsed time)
  2. CPU使用率
  3. 执行的命令内容

自定义耗时提示

虽然ble.sh没有直接提供选项来隐藏命令内容,但我们可以通过编写自定义的POSTEXEC钩子函数来实现这个需求。以下是实现方案的核心思路:

  1. 首先禁用内置的耗时提示:

    bleopt exec_elapsed_mark=
    
  2. 然后注册自定义的POSTEXEC钩子函数:

    function custom.postexec {
      if ble/exec/time#mark-enabled; then
        # 耗时计算和格式化逻辑
        ble/util/print "[ble: elapsed ${ata} (CPU ${cpu}%)]"
      fi
    }
    blehook POSTEXEC+=custom.postexec
    

完整实现示例

下面是一个完整的自定义实现,它提供了更灵活的格式控制:

# 禁用内置耗时提示
bleopt exec_elapsed_mark=

# 自定义耗时提示格式
bleopt github481_elapsed_mark=$'\e[94m[ble: elapsed %s (CPU %s%%)]\e[m'

function ble/contrib/config:github481-elapsed-mark-without-command/postexec {
  if ble/exec/time#mark-enabled; then
    local ata=$((_ble_exec_time_ata/1000))
    
    # 耗时单位自动转换
    if ((ata<1000)); then
      ata="${ata}ms"
    elif ((ata<1000*1000)); then
      ata="${ata::${#ata}-3}.${ata:${#ata}-3}s"
    elif ((ata/=1000,ata<3600*100)); then
      local min
      ((min=ata/60,ata%=60))
      if ((min<100)); then
        ata="${min}m${ata}s"
      else
        ata="$((min/60))h$((min%60))m${ata}s"
      fi
    else
      local hour
      ((ata/=60,hour=ata/60,ata%=60))
      ata="$((hour/24))d$((hour%24))h${ata}m"
    fi

    # CPU使用率计算
    local cpu='--.-'
    if ((_ble_exec_time_tot)); then
      cpu=$(((_ble_exec_time_usr+_ble_exec_time_sys)*1000/_ble_exec_time_tot))
      cpu=$((cpu/10)).$((cpu%10))
    fi

    # 使用预设格式输出
    local ret
    ble/util/sprintf ret "$bleopt_github481_elapsed_mark" "$ata" "$cpu"
    ble/util/print "$ret"
  fi
}

# 注册钩子
blehook POSTEXEC+=ble/contrib/config:github481-elapsed-mark-without-command/postexec

实现特点

  1. 智能时间单位转换:自动根据耗时长短选择合适的单位(毫秒、秒、分钟、小时、天)
  2. 精确的CPU使用率计算:保留一位小数精度
  3. 可自定义输出格式:通过bleopt github481_elapsed_mark可以修改输出样式
  4. 颜色支持:默认使用蓝色高亮显示

使用建议

  1. 对于简单的需求,可以直接使用上面的代码片段
  2. 如果需要更多定制,可以修改bleopt github481_elapsed_mark的值来改变输出格式
  3. 更复杂的定制可以修改钩子函数中的计算逻辑

通过这种方式,ble.sh用户可以灵活地控制命令执行后的耗时提示,既保持了功能的实用性,又避免了输出信息的冗余。

登录后查看全文
热门项目推荐

项目优选

收起
ohos_react_nativeohos_react_native
React Native鸿蒙化仓库
C++
176
261
RuoYi-Vue3RuoYi-Vue3
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
860
511
ShopXO开源商城ShopXO开源商城
🔥🔥🔥ShopXO企业级免费开源商城系统,可视化DIY拖拽装修、包含PC、H5、多端小程序(微信+支付宝+百度+头条&抖音+QQ+快手)、APP、多仓库、多商户、多门店、IM客服、进销存,遵循MIT开源协议发布、基于ThinkPHP8框架研发
JavaScript
93
15
openGauss-serveropenGauss-server
openGauss kernel ~ openGauss is an open source relational database management system
C++
129
182
openHiTLSopenHiTLS
旨在打造算法先进、性能卓越、高效敏捷、安全可靠的密码套件,通过轻量级、可剪裁的软件技术架构满足各行业不同场景的多样化要求,让密码技术应用更简单,同时探索后量子等先进算法创新实践,构建密码前沿技术底座!
C
259
300
kernelkernel
deepin linux kernel
C
22
5
cherry-studiocherry-studio
🍒 Cherry Studio 是一款支持多个 LLM 提供商的桌面客户端
TypeScript
596
57
CangjieCommunityCangjieCommunity
为仓颉编程语言开发者打造活跃、开放、高质量的社区环境
Markdown
1.07 K
0
HarmonyOS-ExamplesHarmonyOS-Examples
本仓将收集和展示仓颉鸿蒙应用示例代码,欢迎大家投稿,在仓颉鸿蒙社区展现你的妙趣设计!
Cangjie
398
371
Cangjie-ExamplesCangjie-Examples
本仓将收集和展示高质量的仓颉示例代码,欢迎大家投稿,让全世界看到您的妙趣设计,也让更多人通过您的编码理解和喜爱仓颉语言。
Cangjie
332
1.08 K