我不记得在哪里,但我已经看到过 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
。