我刚从tcsh
换成了bash
, 特别是在使用%c02
(带有设置的省略号)时,我非常想念缩短目录提示选项。
我看到PROMPT_DIRTRIM
几乎做到了正确的事情(除了省略号),但我只用bash
3(在OS X上)。我在SO上找到了这个配方,它根据总长度缩短,所以会在目录中间断开路径名称,这不符合我的需求。
因此,我想出了以下方法:
PROMPT_DIRTRIM=2 ## from bash4, but used here
dirtrim()
{
local NAME="$1" start= endelts=
[[ "$NAME" =~ ^"$HOME"(/|$) ]] && NAME="~${NAME#$HOME}" ## $HOME ==> ~
IFS=/ read -ra elts <<< "$NAME"; ## split $PWD on "/"
start=$((${#elts[@]}-${PROMPT_DIRTRIM})) ## first element to retain
if [ ${start} -gt 1 ]; then
for ((i=${start}; i<${#elts[@]}; i++)); do
endelts="${endelts}/${elts[$i]}"; ## concat together the trailing path
done
NAME="...${endelts}"
fi
echo "$NAME"
}
PS1='\h:$(dirtrim "$PWD")\$ '
它能工作:
blackat:~$ cd ~/Library/Application\ Support/Apple
blackat:.../Application Support/Apple$
但我对bash还不是很熟悉,也不喜欢显式的for(())循环;但是,我似乎找不到其他方法来以正确处理目录名称中的空格(例如使用${elts[@]:${start}})重新连接拆分的elts数组的最后条目。有什么提示可以做到这一点或者其他改进吗?
(顺便说一下,我认为这是一个编程问题,因为bash是一种编程语言....)
Sphinx JL:
。在Mac终端中,您可以在终端标题栏(属性->窗口并查找标题部分)中包含路径。 - Jonathan Leffler