我想将 Python 脚本的输出添加到我的zsh
提示符中,但我不知道该怎么做?
这是通过手册页中所谓的“PROMPT EXPANSION”来完成的吗?
请有人让我走上正确的道路,即发布一些我在谷歌上找不到的有用链接。
答案1
主要有两种方式:
- 通过启用参数扩展
PROMPT_SUBST
- 数组
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
。