如何将脚本的输出包含到 zsh 提示符中

如何将脚本的输出包含到 zsh 提示符中

我想将 Python 脚本的输出添加到我的zsh提示符中,但我不知道该怎么做?

这是通过手册页中所谓的“PROMPT EXPANSION”来完成的吗?

请有人让我走上正确的道路,即发布一些我在谷歌上找不到的有用链接。

答案1

主要有两种方式:

  1. 通过启用参数扩展PROMPT_SUBST
  2. 数组psvar

1.提示中的参数扩展

如果PROMPT_SUBST启用

setopt PROMPT_SUBST

提示符在求值之前要经过参数扩展、命令替换和算术扩展。

这样,可以通过命令替换包含脚本的输出。例如:

PROMPT='Look at this: $(python yourscript.py) >'

如果输出包含转义序列(%~%M%F{red}),则会在打印提示之前对它们进行评估。

2. psvar数组

数组的前九个值之一psvar可以设置为脚本的输出。然后可以使用 来调用它%Xv,其中X是 1 到 9 之间的数字(如果X省略,则默认为 1)。

psvar[5]=$(python yourscript.py)
PROMPT='Look at this: %5v >'

为了在每次打印提示之前刷新该值,precmd必须设置钩子函数:

precmd() {
    psvar[5]=$(python yourscript.py)
}

如果已经有一个precmd函数,或者要使用多个函数,那么使用 是一个好主意add-zsh-hook

# load add-zsh-hook, need to be done only once
autoload -Uz add-zsh-hook

pyscript() {
    psvar[5]=$(python yourscript.py)
}

add-zsh-hook precmd pyscript

这将添加pycript到打印提示之前需要运行的函数列表。

答案2

您可以通过设置一个precmd挂钩来完成此操作,该挂钩将获取命令的输出并根据需要对其进行格式化,然后将其提供给提示符。至少,您需要:

autoload -U add-zsh-hook
add-zsh-hook precmd my_precmd_hook_function

定义my_precmd_hook_function调用 python 脚本并在变量中捕获其输出。然后您可以在 $PROMPT 中使用该变量:

my_precmd_hook_function() {
  python_says=$(myPythonScript arg1 arg2)
}

PROMPT='$python_says'

您可以在挂钩中设置所需数量的变量precmd,并使用它们来构建相当复杂的提示。请记住,您在钩子中执行的操作越多,绘制提示并将控制权返回给您所需的precmd时间就越长。zsh如果您的 python 脚本非常简单,您无疑会注意到滞后。

SIMPLE PROMPT ESCAPES您可以在手册页的 参考资料 部分中看到全部的可能性zshmisc

相关内容