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

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

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

我怎样才能重现该行为?

答案1

玩了一会儿之后,我得到了你需要的答案:

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

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

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

IE

/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$ 

答案2

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

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
}

答案3

缩短除最后一个不带 python 的名称之外的所有名称:

user:/h/u/D/C/current$ 
sps() {
    echo `dirname $PWD` | sed -r 's|/(.)[^/]*|/\1|g'
}
PS1='\u:$$(eval "sps")/\W\$ '

答案4

这是我的解决方案,用于缩短相对于 $HOME 的路径,但最后一个目录除外:

sps() {
    current_path=${PWD/#$HOME/'~'}
    if [ "$current_path" = "~" ]; then
       echo $current_path
    else
       path_parent=${current_path%\/*}
       path_parent_short=`echo $path_parent | sed -r 's|/(.)[^/]*|/\1|g'`
       directory=${current_path##*\/}
       echo "$path_parent_short/$directory"
    fi
}

PS1='\u:$$(eval "sps") \$ '

其转变/home/user/workspace/ocaml/project--> ~/w/o/project

相关内容