在 shell 提示中缩写当前目录?

Naf*_*Kay 24 bash prompt

vim 有一个非常好的功能,当它们有点长时,它会在其路径中使用:

在此处输入图片说明

它缩写了顶部选项卡中文档的路径。有没有办法做类似的事情,所以我的 bash 提示看起来不像这样:

rfkrocktk@work-laptop ~/Documents/Projects/Work/maventest/src/main/java/com/tkassembled/ $ 
Run Code Online (Sandbox Code Playgroud)

Ben*_*tFX 17

我喜欢PROMPT_DIRTRIM在 bash...

export PROMPT_DIRTRIM=2
Run Code Online (Sandbox Code Playgroud)

将您的示例提示更改为...

rfkrocktk@work-laptop ../com/tkassembled/ $
Run Code Online (Sandbox Code Playgroud)

这个对我有用。

  • @nicerobot 是的,你有真正的答案。:) 我知道它没有给出他要求的缩写,但通常当我们看到简单的选项时,我们的期望就会改变。此外,它是标准的,因此我觉得它值得一提。 (3认同)

nic*_*bot 16

试试这个

PROMPT_COMMAND='PS1X=$(perl -pl0 -e "s|^${HOME}|~|;s|([^/])[^/]*/|$""1/|g" <<<${PWD})'
Run Code Online (Sandbox Code Playgroud)

或者,纯 bash:

PROMPT_COMMAND='PS1X=$(p="${PWD#${HOME}}"; [ "${PWD}" != "${p}" ] && printf "~";IFS=/; for q in ${p:1}; do printf /${q:0:1}; done; printf "${q:1}")'
Run Code Online (Sandbox Code Playgroud)

然后

PS1='\u@\h ${PS1X} $ '
Run Code Online (Sandbox Code Playgroud)

产生(注意~for ${HOME}):

rfkrocktk@work-laptop ~/D/P/W/m/s/m/j/c/tkassembled $
Run Code Online (Sandbox Code Playgroud)

感谢@enzotib,我改进了我的答案


enz*_*tib 15

类似于@nicerobot 的答案,但稍微短一些:

PROMPT_COMMAND='pwd2=$(sed "s:\([^/]\)[^/]*/:\1/:g" <<<$PWD)'
PS1='\u@\h:$pwd2\$ '
Run Code Online (Sandbox Code Playgroud)

这将显示以下示例输出:

enzotib@acer:/h/enzotib$ cd
enzotib@acer:/h/enzotib$ cd /usr/share/doc/acpid/examples/
enzotib@acer:/u/s/d/a/examples$
Run Code Online (Sandbox Code Playgroud)


小智 5

添加到enzotib的答案中,以下代码片段将:

  1. 转换/Path/To/Your/Home/~/(因此路径将~/a/b/c代替/P/T/Y/H/a/b/c
  2. 使用“点文件”的第一个字母而不是仅显示点(/a/./c/d将变为/a/.b/c/d):

    PROMPT_COMMAND='PS1_PATH=$(sed "s:\([^/\.]\)[^/]*/:\1/:g" <<< ${PWD/#$HOME/\~})'
    export PS1='\u@\h:$PS1_PATH\$ '
    
    Run Code Online (Sandbox Code Playgroud)

确保使用单引号,否则 bash 会过早地展开它。