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
변수에 할당된 값은 할당 전에 확장됩니다. 이것이 디렉토리를 변경할 때 변경되지 않는 이유입니다.