zsh 프롬프트에서 비밀번호가 잘못 설정되었습니다.

zsh 프롬프트에서 비밀번호가 잘못 설정되었습니다.

파일 프롬프트에 다음을 입력하면 .zshrc:

PROMPT="`pwd` >"

현재 작업 디렉토리를 인쇄하고 싶습니다. 그러나 pwd항상 인쇄 됩니다 /Users/kevin. 현재 작업 디렉토리가 표시되지 않는 이유는 무엇입니까?

(이 기능을 설정하는 함수가 있다는 것을 알고 있습니다 %~. 왜 이것이 작동하지 않는지 궁금합니다. 이는 제가 하려는 고급 작업의 간단한 경우입니다.)

답변1

PROMPT 변수가 설정되면 "pwd"가 평가되기 때문입니다. 노력하다 echo $PROMPT.

예를 들어

renan ~ % PROMPT="`pwd` >"

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

보시다시피 "pwd"는 PROMPT= 명령을 실행할 때 있었던 디렉터리로 대체됩니다.

답변2

문제는 백틱이 마법 같은 순간마다 바뀌는 것이 아니라 단 한 번만 바뀌므로 프롬프트가 pwd현재 있는 모든 것으로 설정된다는 것입니다. 명령을 입력할 때마다 무언가를 다시 실행하려면 function precmd()를 재설정해야 하는 것을 사용하십시오 $PROMPT. 예를 들어, 이것은 현재 디렉토리를 기반으로 프롬프트를 재설정하는 매우 유용한 기능입니다.

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//\//\\}> "
    }
}

...또는 %~PS1에서 다음과 같이 사용하세요.

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

여기서는 %n사용자, %m호스트, %~현재 디렉터리, %#슈퍼유저 표시기입니다.

관련 정보