파일 프롬프트에 다음을 입력하면 .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
호스트, %~
현재 디렉터리, %#
슈퍼유저 표시기입니다.