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

时间:2011-07-22 12:57:13

标签: bash zsh

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

1 个答案:

答案 0 :(得分: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} %'

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

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

顺便说一下,$SECONDS变量在bash中也可用,但我不知道如何在那里实现钩子。