pwd não está sendo configurado corretamente no prompt zsh

0

Se eu digitar isso no meu PROMPT no meu arquivo .zshrc :

PROMPT="'pwd' >"

Espero que ele imprima o diretório de trabalho atual. No entanto, pwd sempre imprime /Users/kevin . Por que não mostra meu diretório de trabalho atual?

(Eu sei que existe uma função chamada %~ que irá configurá-lo para você. Estou curioso para saber porque isso não funciona, este é um caso mais simples de algo mais avançado que estou tentando fazer ).

    
por Kevin Burke 19.02.2012 / 19:26

2 respostas

2

Porque "pwd" é avaliado assim que a variável PROMPT é definida. Experimente echo $PROMPT .

por exemplo,

renan ~ % PROMPT="'pwd' >"

/home/renan >echo $PROMPT
    /home/renan >

Como você pode ver, o "pwd" foi substituído pelo diretório em que eu estava quando executei o comando PROMPT =.

    
por 19.02.2012 / 19:31
1

O problema é que os backticks não são substituídos a cada momento mágico, mas apenas uma vez, portanto, seu prompt está configurado para o pwd em que você estava. Para reexecutar algo toda vez que você digitar um comando, use function precmd() que deve redefinir seu $PROMPT . Por exemplo, esta é uma função muito útil que redefine seu prompt de acordo com o diretório atual:

function windows() {
    clear
    echo -e "Microsoft Windows 2000 [Version 5.00.2195]\n(c) Microsoft Corporation, 1985-2000.\n"
    function precmd() {
        PWD=$(pwd)
        PWD=${PWD/\/usr/\/Program Files}
        PWD=${PWD/\/home\/$(whoami)/\/Documents and Settings\Administrator}
        PWD=${PWD/\/home/\/Documents and Settings}
        PWD=${PWD/\/sbin/\/Windows}
        export PS1="C:${PWD//\//\}> "
    }
}

... ou use apenas %~ no seu PS1, assim:

PS1=' %n@%m: %~%# '

em que %n é usuário, %m é host, %~ é o diretório atual e %# é um indicador de superusuário.

    
por 20.02.2012 / 09:32

Tags