如何在Fish Shell中自动记录命令耗时并按需查看?
自动记录命令耗时并按需查看的实现方案
Fish Shell 实现(匹配你的示例输出)
Fish 自带事件钩子,能轻松实现自动记录命令耗时。要获取示例里的usr/sys详细时间,需结合Fish的time命令和历史记录,注意:如果命令有副作用(比如修改文件、发送请求),这种方法会重复执行命令,需谨慎使用。
步骤1:配置自动记录逻辑
编辑Fish的配置文件~/.config/fish/config.fish,添加以下内容:
# 定义postexec钩子:命令执行完成后记录其time输出 function __auto_record_cmd_time --on-event fish_postexec # 获取上一条执行的命令(从历史记录读取) set last_cmd $history[1] # 执行time命令并将结果写入临时文件(覆盖旧记录) time $last_cmd > ~/.last_command_time 2>&1 end # 定义last-time命令,用于查看最近一次耗时记录 function last-time cat ~/.last_command_time end
步骤2:生效配置
重启Fish终端,或者执行source ~/.config/fish/config.fish让配置立即生效。
测试用法
$ sleep 2 $ last-time ________________________________________________________ Executed in 2.00 secs fish external usr time 2.28 millis 912.00 micros 1.37 millis sys time 0.30 millis 296.00 micros 0.00 millis
无副作用的轻量替代方案
如果不想重复执行命令,仅需要记录总耗时(毫秒级),可以直接用Fish内置的$CMD_DURATION变量:
修改config.fish内容为:
function __auto_record_cmd_time --on-event fish_postexec echo "Executed in $CMD_DURATION millis" > ~/.last_command_time end function last-time cat ~/.last_command_time end
Bash Shell 实现
方法1:详细耗时记录(含usr/sys时间)
同样需注意:有副作用的命令会被重复执行,可能引发意外。
编辑~/.bashrc,添加以下内容:
# 记录上一条命令的耗时到文件 PROMPT_COMMAND=' # 获取上一条命令(过滤历史记录的序号) last_cmd=$(history 1 | sed "s/^[ ]*[0-9]*[ ]*//") # 执行time命令并保存输出 time -v "$last_cmd" > ~/.last_command_time 2>&1 ' # 定义last-time命令 last-time() { cat ~/.last_command_time }
执行source ~/.bashrc生效后,即可用last-time查看记录。
方法2:轻量总耗时记录
利用Bash的SECONDS变量记录总秒数:
# 记录命令开始时间 trap 'cmd_start=$SECONDS' DEBUG PROMPT_COMMAND=' if [ -n "$cmd_start" ]; then elapsed=$(( SECONDS - cmd_start )) echo "Executed in $elapsed secs" > ~/.last_command_time unset cmd_start fi ' last-time() { cat ~/.last_command_time }
Zsh Shell 实现
详细耗时记录
编辑~/.zshrc:
# preexec钩子:记录命令内容 preexec() { last_cmd="$1" } # precmd钩子:命令执行完成后记录耗时 precmd() { if [ -n "$last_cmd" ]; then time -v "$last_cmd" > ~/.last_command_time 2>&1 unset last_cmd fi } # last-time命令 last-time() { cat ~/.last_command_time }
执行source ~/.zshrc生效即可。
注意事项
- 临时文件路径可自定义(比如
/tmp/.last_cmd_time),避免用户目录产生冗余文件。 - 带有副作用的命令(如
rm file、curl -X POST),建议使用轻量总耗时方案,避免重复执行引发问题。
内容的提问来源于stack exchange,提问作者baxx
相关产品推荐
相关产品推荐

