我目前有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 . )
。