Substituição de comando não ocorrendo para variável PS1 em zsh

1

Estou tendo o pior momento tentando obter a saída de comando avaliada dinamicamente no meu prompt PS1 com zsh no Ubuntu 17.10. Aqui estão algumas tentativas que fiz (começo no diretório /abc e o prompt está em negrito):

$ export PS1="$(pwd) > "
/abc > cd /def
/abc > pwd
/def
/abc > export PS1="\$(pwd) > "
$(pwd) > export PS1='$(pwd) > '
$(pwd) > export PS1='\$(pwd) > '
\$(pwd) > [ragequit]

O primeiro resultado é o mais próximo, mas parece que o comando pwd está sendo avaliado apenas uma vez quando eu defino a variável PS1 . Claramente há algo que não entendo. O que posso fazer para obter $(<cmd>) reavaliado sempre que o prompt de comando for exibido?

    
por Tony 31.03.2018 / 17:50

1 resposta

2

Para obter o zsh shell para executar a substituição de comando no valor de PS1 , defina a opção PROMPT_SUBST shell:

set -o PROMPT_SUBST
PS1='$(pwd) > '

Observe que não há necessidade de export a variável PS1 .

Para obter mais informações sobre isso, consulte a seção "EXPANSÃO DE SEQUÊNCIAS DE PROMPT" no manual zshmisc em seu sistema.

Quando você usa

PS1="$(pwd) > "

o valor dado à variável PS1 é expandido antes que a atribuição ocorra. É por isso que não muda quando você altera os diretórios.

    
por 31.03.2018 / 18:25