我在 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
周围的颜色代码而不是\[ \]
。)