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

別のオプションは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 . )"
}

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.