将进程执行时间包括在shell提示符中

bee*_*tee 4 bash zsh

是否可以将刚完成的进程的执行时间 - 'time'命令的输出 - 包含在命令提示符中?我们在Linux机器上使用zsh,在Windows机器上使用bash(msy​​s),因此很高兴知道如何在两者中执行此操作.

ZyX*_*ZyX 5

对于zsh,您可以尝试$REPORTTIME变量(搜索man zshall它).它不会在提示中加入时间,但它会在每个执行的命令后回显时间(在某些情况下不起作用).你可以使用preexecprecmd钩子和$SECONDS变量来获得执行时间(但它不是太精确):

function preexec() {
    typeset -gi CALCTIME=1
    typeset -gi CMDSTARTTIME=SECONDS
}
function precmd() {
    if (( CALCTIME )) ; then
        typeset -gi ETIME=SECONDS-CMDSTARTTIME
    fi
    typeset -gi CALCTIME=0
}
PS1='${ETIME} %'
Run Code Online (Sandbox Code Playgroud)

(注意PS1定义中使用的单引号.)

第三种方法将强制您失去更改环境变量的能力,或者仅适用于单个命令.它还会强迫你写一些hacky来查看命令输出.这种方法是"重新定义接受行zle小部件以添加time到执行的命令".我不是在这里编写代码,因为它有上述问题.

顺便说一句,$SECONDS变量也可以在bash中使用,虽然我不知道如何在那里实现钩子.