.bashrc PS1:\w 对于 WSL

.bashrc PS1:\w 对于 WSL

我在 WSL 上使用 Debian。但是我主要在 Windows 路径下工作。目前我的PS1路径.bashrc如下:

PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '

这会使路径在 Windows 驱动器上非常长,因为它总是显示不必要的前缀/mnt/c/Users/name。我想知道是否有可能显示相对于的路径/mnt/c/Users/name

提前致谢!

答案1

正如您自己的示例所示,该变量可以包含任何 shell 扩展;如果对扩展进行引用/转义以防止在分配期间对其进行评估,则每次显示提示时都会再次对其进行评估。

因此,除了使用\w,您还可以使用$PWD各种字符串扩展来替换其前缀:

PS1='etc etc ${PWD/#"/mnt/c/Users/name/"/"Win/"} etc'

/mnt/c/Users/name/这将用替换前缀Win/。(这并不理想,因为它仅在存在尾部斜杠时才有效,即当您在子目录中时,但不知何故,省略尾部斜杠感觉不对,因为这可能会导致奇怪的冲突……)

你甚至可以使用函数输出:

fancyprompt() {
    local wd="$PWD/"
    wd=${wd/#"/mnt/c/Users/name/"/"W:/"}
    wd=${wd%"/"}
    wd=${wd//"/"/"\\"}
    echo "$wd"
}

PS1='etc etc $(fancyprompt) etc'

请注意,单引号'...'可以防止立即进行 $ 扩展。

(你甚至可以全部的提示将由函数显示;如果您决定这样做,请确保输出\001\002周围的颜色代码而不是\[ \]。)

相关内容