Bash의 PS1이 심볼릭 링크가 아닌 원래 디렉토리 이름을 표시하도록 하시겠습니까?


4

현재 PS1='\W'심볼릭 링크 디렉토리에있을 때 프롬프트에 심볼릭 링크 이름이 표시됩니다. PS1에서 원래 디렉토리 이름을 표시하도록하려면 어떻게해야합니까?

답변:


6

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 $ _

또 다른 옵션은 cdsymlink 대신 표준 디렉토리에 들어가는 함수 로 대체 하는 것입니다.

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 . )"
}

0

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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.