![zsh 프롬프트에서 비밀번호가 잘못 설정되었습니다.](https://linux55.com/image/21090/zsh%20%ED%94%84%EB%A1%AC%ED%94%84%ED%8A%B8%EC%97%90%EC%84%9C%20%EB%B9%84%EB%B0%80%EB%B2%88%ED%98%B8%EA%B0%80%20%EC%9E%98%EB%AA%BB%20%EC%84%A4%EC%A0%95%EB%90%98%EC%97%88%EC%8A%B5%EB%8B%88%EB%8B%A4..png)
파일 프롬프트에 다음을 입력하면 .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
호스트, %~
현재 디렉터리, %#
슈퍼유저 표시기입니다.