현재 가지고 있지만 PS1='\W'
심볼릭 링크된 디렉토리에 있을 때 프롬프트에 심볼릭 링크 이름이 표시됩니다. PS1에서 원래 디렉토리 이름을 표시하도록 하려면 어떻게 해야 합니까?
답변1
Linux에서는 다음을 사용할 수 있습니다.
export PS1='$( readlink -f . )'
예:
$ export PS1='$( readlink -f . ) \$ '
/home/danielbeck $ ln -s /etc foo
/home/danielbeck $ cd foo
/etc $ _
/home/danielbeck/foo
를 사용하여 상위 디렉터리를 해결하는 등 다른 모든 작업에는 여전히 참여하므로 cd ..
예를 계속 진행합니다.
/etc $ cd ..
/home/danielbeck $ _
cd
또 다른 옵션은 다음과 같이 심볼릭 링크 대신 표준 디렉터리에 들어가는 함수로 바꾸는 것입니다 .
function cd {
if [[ $# -ne 1 ]] ; then
builtin cd "$@"
elif [[ "$1" = "-" ]] ; then
builtin cd -
else
builtin cd "$( readlink -f "$1" )"
fi
}
이는 모든 cd
인수에 대해서도 작동할 수 있으며 다음도 지원합니다 CDPATH
.
function cd {
builtin cd "$@"
builtin cd "$( readlink -f . )"
}
답변2
저와 같이 PS1에서 역참조된 심볼릭 링크로 문제를 해결하기를 원하는 사람들에게 약간의 도움을 추가하려면 .bashrc를 다음과 같이 편집하세요.
if [ "$color_prompt" = yes ]; then
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]$(readlink -f \w)\[\033[00m\]\$ '
else
PS1='${debian_chroot:+($debian_chroot)}\u@\h:$(readlink -f \w)\$ '
fi
unset color_prompt force_color_prompt
# If this is an xterm set the title to user@host:dir
case "$TERM" in
xterm*|rxvt*)
PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: $(readlink -f .)\a\]$PS1"
;;
*)
;;
esac
답변3
PS1
파일 에 이미 사용자 정의된 변수가 있고 ~/.bashrc
다른 사용자 정의를 유지하고 싶을 가능성이 있습니다 .
간단히 말해서... 들어가서 변수가 정의된 ~/.bashrc
위치를 찾아 로 바꾸세요 .PS1
\w
$( readlink -f . )