現在、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 . )
。