내 RPROMPT
것은 svn 정보를 표시하는 데 사용하도록 설정되었습니다 vcs_info
. 그것은 말한다 RPROMPT=${vcs_info_msg_0_}
. vcs_info
을 사용하여 호출됩니다 precmd()
. 그러나 디렉터리를 변경하면 RPROMPT가 업데이트되지 않습니다. 프롬프트를 다시 호출할 때만 작동하며(소스 ~/.zshrc 또는 Prompt를 통해) 프롬프트를 다시 호출하지 않는 한 chdir에서는 변경되지 않습니다. 이 동작을 바꿀 수 있는 방법이 있나요?
답변1
지연 평가를 할당할 때 변수 값을 작은따옴표로 묶어보세요.
RPROMPT='${vcs_info_msg_0_}'
답변2
동적 별칭을 정의할 때 작은따옴표를 사용하여 평가를 지연하는 것도 가능합니다. 다음은 기존 SSH 에이전트 프로세스에 새 쉘을 연결하기 위한 별칭입니다 . 이 프로세스는 homedir의 파일에 쉘 코드를 작성하는 t
별칭으로 시작됩니다 .ssh-start
mymistress:~> which ssh-start
ssh-start: aliased to eval `ssh-agent | tee ~/.ssh/ssh-agent.out` ; ssh-add ~/.ssh/id_rsa
mymistress:~> grep "alias t" .zshrc
alias t="eval `cat ~/.ssh/ssh-agent.out`"
mymistress:~> which t
t: aliased to eval SSH_AUTH_SOCK=/tmp/ssh-nZBZp29804/agent.29804; export SSH_AUTH_SOCK;\nSSH_AGENT_PID=29805; export SSH_AGENT_PID;\necho Agent pid 29805;`
이 정의는 t
새 실행에 대한 새 정보가 ssh-start
무시되기 때문에 좋지 않습니다. 내 .zshrc에서 별칭 정의를 t
작은따옴표로 변경하면 더 나은 동작이 제공됩니다.
mymistress:~> grep "alias t" .zshrc
alias t='eval `cat ~/.ssh/ssh-agent.out`'
mymistress:~> source ~/.zshrc
mymistress:~> which t
t: aliased to eval `cat ~/.ssh/ssh-agent.out`
t
제공된 정의의 확장에 주목하세요 which t
. 큰따옴표(명령 또는 환경 변수의 즉각적인 내부 확장)와 작은따옴표(명령 및 변수의 지연 평가)의 효과를 보여줍니다.