嗨我知道你设置了提示变量来编辑这个提示
daemon
如何在提示加载时执行命令并每次打印结果。
答案 0 :(得分:5)
实际上有两种(主要)方法可以实现这一目标:
使用命令替换作为提示
的一部分运行命令setopt promptsubst
PROMPT='Date %d Result $(a_command) '
promptsubst
,否则zsh
将不执行任何参数扩展,算术扩展或命令替换。 此外,需要引用提示文本,以便在设置PROMPT
时不进行扩展。所以要么把它放在单引号中,要么如果你有/想要使用双引号,请在$
之前添加\
以在必要时单独引用它们:
PROMPT="Date %d Result \$(a_command) Const $(another_command)"
设置$(another_command)
(因此只运行一次,结果只能永久替换)和PROMPT
每次显示提示时,这将展开$(a_command)
。
使用precmd
函数(或钩子)和psvar
数组:
autoload -Uz add-zsh-hook
a_function () {
psvar[1]=$(a_command)
}
two_function () {
psvar[2]=$(two_command)
}
add-zsh-hook precmd a_function
add-zsh-hook precmd two_function
PROMPT='Date %d Result1 %v Result2 %2v '
precmd
功能。您还可以设置要在precmd_functions
数组中运行的函数列表。 add-zsh-hook
提供了一种向该数组添加函数的简便方法。%Nv
将替换为psvar
数组的第N个元素。如果省略N
(%v
)N==1
,则(对于采用数字参数的其他提示令牌也是如此)乍一看,第二种方法可能看起来要复杂得多,只需使用promptsubst
即可。但这只是非常简单的替换的情况。使用precmd
允许使用更复杂的函数,而不会因PROMPT
中填充几行代码而使$( )
的定义无法读取。
您还可以结合使用这两种方法,并放弃在某些或所有情况下使用psvar
:
autoload -Uz add-zsh-hook
setopt promptsubst
a_function () {
a_parameter=$(a_command)
}
two_function () {
psvar[2]=$(two_command)
}
add-zsh-hook precmd a_function
add-zsh-hook precmd two_function
PROMPT='Date %d Result ${a_parameter} %2v'