如何将bash提示符的当前路径缩短为每个目录一个字母?


9

我不记得在哪里,但是我已经看到了bash提示符的当前路径以一种有趣的方式缩短了:路径中包含的每个目录(最后一个除外)仅被其第一个字母替换。例如:path/to/some/directory将缩短为p/t/s/directory

如何重现该行为?


您无法在中直接执行此操作PS1。您需要设置PS1为包含一个变量(PS1='${SHORT_PWD}\\$'),然后在中更新该变量$PROMPT_COMMAND
吉尔斯(Gilles)'所以

@Gilles'所以,别再作恶了'确保您可以直接做,如果您使用双引号,则需要反斜杠\$()命令替换
bac0n19年

Answers:


8

在玩了一段时间之后,我得到了您需要的答案:

将此添加到主目录中的.bashrc文件中,退出终端并租用它,您会得到提示。

PS1='$(eval "sps")$ '
sps() {
   echo "$PWD" | sed -r 's|/([^/]{,2})[^/]*|/\1|g'
}

sps()每次PS1显示提示变量时,它使用声明的函数来评估路径

/ho/de/De/Ap/Ti$ pwd
/home/deth/Desktop/Apps/Tivo
/ho/de/De/Ap/Ti$ 

或者...如果您坚持要写一封信

PS1='$(eval "sps")$ '
sps() {
   echo "$PWD" | sed -r 's|/(.)[^/]*|/\1|g'
}

显示:

/h/d/D/A/T$ pwd
/home/deth/Desktop/Apps/Tivo
/h/d/D/A/T$ 

谢谢梅尔。我的提示实际上是删除user@pc零件。我该如何处理?
Alex

3

要截断除最后一个目录外的所有目录名:

PS1='$(eval "sps")$ '                                                                                
sps() {                                                                                              
    python -c "import sys; dirs = sys.argv[1].split('/'); print '/'.join(d[:1] for d in dirs[:-1]) + '/' + dirs[-1]" $PWD
}

更改目录时不起作用?
Aditya Varma

1

缩短除最后一个没有python的名称以外的所有名称:

user:/h/u/D/C/current$ 
sps() {
    echo `dirname $PWD` | sed -r 's|/(.)[^/]*|/\1|g'
}
PS1='\u:$$(eval "sps")/\W\$ '
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.