如何在每个ZSH shell行显示cmd?

时间:2017-09-11 00:30:22

标签: shell kubernetes zsh

我的zsh配置中有这个功能:

local kube_prompt() 
{
   kubectl_current_context=$(kubectl config current-context)
   kubectl_cluster=$(echo $kubectl_current_context | cut -d '_' -f 4)
   kubectl_prompt="⎈ ($kubectl_cluster)"
   echo $kubectl_prompt
}

我这样称呼它:

%{$fg[white]%}$(kube_prompt) \
${git_info} \

它工作得很好(我在shell提示符下有输出)但我的问题是,

我希望在每个shell行启动此命令(例如,当我按ENTER时),而不仅仅是在我打开一个新shell时。

任何想法如何实现?

谢谢!

1 个答案:

答案 0 :(得分:2)

您可以通过在其周围添加单引号来为评估函数添加延迟。

即。您的PROMPT应该与PROMPT='%{$fg[white]%}$(kube_prompt) ${git_info}'

相似

这将延迟变量的更新时间,以便捕获您运行的命令的效果。

这就是我在.zshrc中配置它的方式:

kube_prompt()
{
   kubectl_current_context=$(kubectl config current-context)
   kubectl_prompt="( \u2388 $kubectl_current_context )"
   echo $kubectl_prompt
}

RPROMPT='%F{81}$(kube_prompt)'

这就是它的样子:

$ kubectl config use-context chip24                                                                                      ( ⎈ minikube )
 Switched to context "chip24".
$ kubectl config use-context hasura                                                                                        ( ⎈ chip24 )
 Switched to context "hasura".
$                                                                                                                          ( ⎈ hasura )

unicode角色⎈为它添加了一个漂亮的k8s徽标效果。 :)