我想配置 zsh 以将每个命令的启动时间附加到执行的行命令旁边。例如:
# before I press ENTER
$ ./script
# after I press enter
$ ./script [15:55:58]
Running script...
我想出了以下配置(也将时间戳设置为黄色):
preexec () {
TIME=`date +"[%H:%M:%S] "`
echo -e "$1 %{$fg[yellow]%}\033[1A\033[1C${TIME}$reset_color"
}
但它会在 cat
和 echo
等基本命令上中断并打印 {
和 %
字符。它也会在密码提示时中断(macOS 终端)。例如使用echo
:
$ echo "hello" [15:55:58]
hello"hello" %{%}
如何修复此配置? 谢谢。
最佳答案
你启发了我,我根据你的剧本写了我的剧本。我已经在 zsh 5.4.smth 上对此进行了测试。
preexec () {
local TIME=`date +"[%H:%M:%S] "`
local zero='%([BSUbfksu]|([FK]|){*})'
local PROMPTLEN=${#${(S%%)PROMPT//$~zero/}}
echo "\033[1A\033[$(($(echo -n $1 | wc -m)+$PROMPTLEN))C $fg[blue]${TIME}$reset_color"
}
关于zsh:执行时在命令旁边打印时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59897062/