Bash 将进程执行时间包含到shell提示符中
是否可以将刚刚完成的流程的执行时间(“time”命令的输出)包含到命令提示符中?我们在linux上使用zsh,在windows机器上使用bash(msys),因此最好知道如何在这两种机器上都使用zsh。对于zsh,您可以尝试使用Bash 将进程执行时间包含到shell提示符中,bash,zsh,Bash,Zsh,是否可以将刚刚完成的流程的执行时间(“time”命令的输出)包含到命令提示符中?我们在linux上使用zsh,在windows机器上使用bash(msys),因此最好知道如何在这两种机器上都使用zsh。对于zsh,您可以尝试使用$REPORTTIME变量(搜索man zshall)。它不会在提示符中输入时间,但会在每次执行命令后回显时间(在某些情况下不起作用)。您可以使用preexec和precmd钩子和$SECONDS变量来获取执行时间(但不太精确): (注意PS1定义中使用的单引号。) 第三
$REPORTTIME
变量(搜索man zshall
)。它不会在提示符中输入时间,但会在每次执行命令后回显时间(在某些情况下不起作用)。您可以使用preexec
和precmd
钩子和$SECONDS
变量来获取执行时间(但不太精确):
(注意PS1定义中使用的单引号。)
第三种方法要么迫使您失去更改环境变量的能力,要么只对单个命令有效。它还将迫使您编写一些黑客代码来查看命令输出。这种方法是“重新定义accept line zle小部件,将时间添加到执行的命令中”。我不是在这里写代码,因为它有上面描述的问题
顺便说一句,
$SECONDS
变量在bash中也可用,尽管我不知道如何在那里实现钩子。告诉我们您已经尝试了什么,也许我们可以提供帮助。祝你好运
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} %'