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

Cut*_*eño 2 prompt zsh python

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

这是通过手册页中所谓的“提示扩展”完成的吗?

请有人让我走上正轨,即发布一些我在 Google 上找不到的有用链接。

Ada*_*hon 9

主要有两种方式:

  1. 通过使能进行参数扩展 PROMPT_SUBST
  2. psvar阵列

1. 提示参数扩展

如果PROMPT_SUBST启用

setopt PROMPT_SUBST
Run Code Online (Sandbox Code Playgroud)

在对提示进行评估之前,它会经过参数扩展、命令替换和算术扩展。

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

PROMPT='Look at this: $(python yourscript.py) >'
Run Code Online (Sandbox Code Playgroud)

如果输出包含转义序列(%~%M%F{red}等)被印刷在提示之前它们将被评估。

2. psvar 数组

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

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

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

precmd() {
    psvar[5]=$(python yourscript.py)
}
Run Code Online (Sandbox Code Playgroud)

如果已经有一个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
Run Code Online (Sandbox Code Playgroud)

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