zsh의 PS1 변수에 대한 명령 대체가 발생하지 않습니다.

zsh의 PS1 변수에 대한 명령 대체가 발생하지 않습니다.

PS1프롬프트에서 동적으로 평가된 명령 출력을 얻는 데 가장 어려움을 겪고 있습니다 .다루기 힘든우분투 17.10에서. 다음은 제가 시도한 몇 가지 사항입니다(디렉토리로 시작했으며 /abc팁은 굵게 표시되었습니다).

$PS1="$(pwd) > " 내보내기
/abc>CD /정의
/abc>비밀번호
/def
/abc>PS1="\$(pwd) > " 내보내기
$(비밀번호)>PS1 내보내기='$(pwd) > '
$(비밀번호)>PS1 내보내기='\$(pwd) > '
\$(비밀번호) > [화난 퇴장]

pwd첫 번째 결과가 가장 가깝지만 변수를 정의할 때 명령이 한 번만 평가되는 것처럼 보입니다 PS1. 분명히 내가 이해하지 못하는 것이 있습니다. $(<cmd>)명령 프롬프트가 표시될 때마다 재평가하려면 어떻게 해야 합니까?

답변1

zsh쉘이 값에 대해 명령 대체를 수행 하도록 하려면 쉘 옵션을 PS1설정하십시오 :PROMPT_SUBST

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

export이 변수는 필수 가 PS1아닙니다.

PROMPT_SUBST셸 옵션이 기본적으로 설정되지 않는 이유는 zsh셸에 이미 풍부한 프롬프트 확장 구문이 있기 때문일 가능성이 높습니다.

예를 들어, 귀하의 예는 다음과 같이 대체될 수 있습니다.

PS1='%/ > '

자세한 내용은 zshmisc시스템 매뉴얼의 "프롬프트 시퀀스 확장" 섹션을 참조하세요.


당신이 사용할 때

PS1="$(pwd) > "

PS1변수에 할당된 값은 할당 전에 확장됩니다. 이것이 디렉토리를 변경할 때 변경되지 않는 이유입니다.

관련 정보