答案1
大量借贷丹尼斯·卡尔斯梅克的回答:
PROMPT_COMMAND='_abbrev_pwd=$(sed -e "s:$HOME:~:" -e "s:/\(.\)[^/]*:/\1:g" <<< "$(dirname "$PWD")")/"$(basename "$PWD")"'
PS1='\u@\h ${_abbrev_pwd}> '
PROMPT_COMMAND 变量是特殊的 bash 变量每次要打印提示时都会执行该命令。这里的代码设置了一个名为_abbrev_pwd
以下元素串联的变量:
- sed 命令的输出:
$(sed -e ... <<< ...)
- 正斜杠
/
- “当前”目录:
$(basename "$PWD")
sed 命令本身采用此处字符串作为输入;这里的字符串是dirname "$PWD"
为了剥离当前目录而调用的结果。然后该字符串将进行两次替换(在-e
sed 选项中给出):
- 用波形符替换“$HOME”目录的任何外观,并且
- 将任何路径元素(正斜杠、捕获的单个字符
.
,然后任意数量的非正斜杠)替换为正斜杠后跟该(捕获的)单个字符;使用标志“全局”重复该模式匹配g
。我使用:
作为sed
搜索和替换分隔符而不是 common/
,以避免牙签倾斜综合征在试图逃避想要的正斜杠。
最后,我们将 PS1 设置为使用_abbrev_pwd
通常放置$PWD
.