![zsh에서 RPROMPT를 모든 입력에서 자동으로 업데이트하는 방법은 무엇입니까?](https://linux55.com/image/16189/zsh%EC%97%90%EC%84%9C%20RPROMPT%EB%A5%BC%20%EB%AA%A8%EB%93%A0%20%EC%9E%85%EB%A0%A5%EC%97%90%EC%84%9C%20%EC%9E%90%EB%8F%99%EC%9C%BC%EB%A1%9C%20%EC%97%85%EB%8D%B0%EC%9D%B4%ED%8A%B8%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
내 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
. 큰따옴표(명령 또는 환경 변수의 즉각적인 내부 확장)와 작은따옴표(명령 및 변수의 지연 평가)의 효과를 보여줍니다.