zsh:执行时在命令旁边打印时间

标签 zsh

我想配置 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"
}

但它会在 catecho 等基本命令上中断并打印 {% 字符。它也会在密码提示时中断(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/

相关文章:

macos - OSX中的zsh编译问题

Oh-My-ZSH 的 Git 插件在更新 Git 后损坏

rvm - zsh中rbenv版本显示右键提示不刷新

zsh - 如何在 zsh 提示符中将文本设置为斜体?

zsh - 如何将 .bashrc 导出到 .zshrc?

shell - .zshrc 中的命令未找到

git - zsh波浪号(〜)在OS X上的扩展方式不同

bash - 将函数从 zsh 导出到 bash 以便在 gnu parallel 中使用

linux - 使用标准 shell 构建自定义应用程序特定的 shell

linux - 我的终端在哪个操作系统中运行?