Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 将进程执行时间包含到shell提示符中_Bash_Zsh - Fatal编程技术网

Bash 将进程执行时间包含到shell提示符中

Bash 将进程执行时间包含到shell提示符中,bash,zsh,Bash,Zsh,是否可以将刚刚完成的流程的执行时间(“time”命令的输出)包含到命令提示符中?我们在linux上使用zsh,在windows机器上使用bash(msys),因此最好知道如何在这两种机器上都使用zsh。对于zsh,您可以尝试使用$REPORTTIME变量(搜索man zshall)。它不会在提示符中输入时间,但会在每次执行命令后回显时间(在某些情况下不起作用)。您可以使用preexec和precmd钩子和$SECONDS变量来获取执行时间(但不太精确): (注意PS1定义中使用的单引号。) 第三

是否可以将刚刚完成的流程的执行时间(“time”命令的输出)包含到命令提示符中?我们在linux上使用zsh,在windows机器上使用bash(msys),因此最好知道如何在这两种机器上都使用zsh。

对于zsh,您可以尝试使用
$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} %'