Parece que a substituição do comando não é avaliada depois que o shell foi interrompido dessa maneira.
Você poderia contorná-lo usando o precmd
hook:
precmd () {
MYPROMPT='>'
}
setopt PROMPT_SUBST
PROMPT='${MYPROMPT}'
precmd
é executado antes de cada prompt. Observe que precmd
não é executado novamente nos casos em que o prompt é apenas redesenhado sem executar uma linha de comando (como neste caso). Ele ainda funciona, pois o valor de MYPROMPT
permanece mesmo sem executar precmd
.
-
Você também pode ter várias funções
precmd
. Você pode gerenciá-los com o móduloadd-zsh-hook
:autoload -Uz add-zsh-hook myprompt_function () { MYPROMPT='>' } add-zsh-hook precmd myprompt_function setopt PROMPT_SUBST PROMPT='${MYPROMPT}'
-
Você também pode usar a variável de matriz especial
psvar
, cujos membros podem ser acessados com o prompt escape%v
ou%Nv
, em queN
é o índice da matriz a ser exibido:precmd () { psvar[3]='>' } PROMPT='%3v'