让 Bash 的 PS1 显示原始目录名称而不是符号链接?

Pet*_*uza 4 bash symbolic-link command-line prompt ps1

我目前有,PS1='\W'但是在符号链接目录中时,提示显示符号链接名称,如何让 PS1 显示原始目录名称?

Dan*_*eck 6

在 Linux 上,您可以使用以下命令:

export PS1='$( readlink -f . )'
Run Code Online (Sandbox Code Playgroud)

例子:

$ export PS1='$( readlink -f . ) \$ '
/home/danielbeck $ ln -s /etc foo
/home/danielbeck $ cd foo
/etc $ _
Run Code Online (Sandbox Code Playgroud)

请注意,您仍然需要/home/danielbeck/foo处理其他所有内容,例如使用 解析父目录cd ..,因此,继续示例:

/etc $ cd ..
/home/danielbeck $ _
Run Code Online (Sandbox Code Playgroud)

另一种选择可能是替换cd为进入规范目录而不是符号链接的函数,例如:

function cd {
    if [[ $# -ne 1 ]] ; then
        builtin cd "$@"
    elif [[ "$1" = "-" ]] ; then
        builtin cd -
    else
        builtin cd "$( readlink -f "$1" )"
    fi
}
Run Code Online (Sandbox Code Playgroud)

这也可能适用于任何cd参数,甚至支持CDPATH

function cd {
    builtin cd "$@"
    builtin cd "$( readlink -f . )"
}
Run Code Online (Sandbox Code Playgroud)