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

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

현재 가지고 있지만 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 . )

관련 정보