вы уже используете функцию в вашем приглашении для имени вашей ветки git, что неплохо, так что просто сделайте то же самое для вашего пути:
# shorten a path in $1 to max of $2 characters, prepending a "..."
function __shortpath {
if [[ ${#1} -gt $2 ]]; then
len=$2+3
echo "..."${1: -$len}
else
echo $1
fi
}
PS1='\[\033[01;32m\][$(__shortpath "\w" 50)\[\033[00m\]\[\033[01;34m\]$(__git_ps1 " (%s)")\033[01;32m\]]\[\033[00m\]\$ '
Это ограничит путь до последних 50 символов.
Это пример. Вы могли бы также подумать о том, чтобы отрезать только косую черту, но это усложняет задачу.
# drops first portion of a path $1 if length is greater than $2
function __droppath {
if [[ ${#1} -gt $2 ]]; then
p=$1
while [ ${#p} -gt $2 ]; do
p="/"$(echo "$p"|cut -d"/" -f3-)
done
echo "..."$p
else
echo $1
fi
}
PS1='\[\033[01;32m\][$(__droppath "\w" 50)\[\033[00m\]\[\033[01;34m\]$(__git_ps1 " (%s)")\033[01;32m\]]\[\033[00m\]\$ '
Может быть, это также хорошая идея, чтобы обезопасить цикл while, проверяя, является ли новая длина короче старой длины (иначе выход) или если новая длина равна 0, и в этом случае вы можете вернуть последнее значение $ p - или продолжить с __shortpath.