Рассмотрим этот сценарий, используя awk вместо sed для вашего случая:
pwd_length=14
pwd_symbol="..."
newPWD="${PWD/#$HOME/~}"
if [ $(echo -n $newPWD | wc -c | tr -d " ") -gt $pwd_length ]
then
newPWD=$(echo -n $newPWD | awk -F '/' '{
print $1 "/" $2 "/.../" $(NF-1) "/" $(NF)}')
fi
PS1='${newPWD}$ '
Для вашего примера каталога ~/workspace/projects/project1/folder1/test
PS1 выглядит следующим образом: ~/workspace/.../folder1/test
UPDATE
Приведенное выше решение будет устанавливать ваше приглашение, но, как вы отметили в своем комментарии, оно НЕ будет динамически менять PS1 при смене каталога. Итак, вот решение, которое будет динамически устанавливать PS1 при смене каталогов.
Поместите эти 2 строки в ваш файл .bashrc:
export MYPS='$(echo -n "${PWD/#$HOME/~}" | awk -F "/" '"'"'{
if (length($0) > 14) { if (NF>4) print $1 "/" $2 "/.../" $(NF-1) "/" $NF;
else if (NF>3) print $1 "/" $2 "/.../" $NF;
else print $1 "/.../" $NF; }
else print $0;}'"'"')'
PS1='$(eval "echo ${MYPS}")$ '
if (NF > 4 && length($0) > 14)
Условие в awk будет применять специальную обработку только в том случае, если ваш текущий каталог имеет глубину более 3 каталогов И если длина $PWD
превышает 14 символов, в противном случае PS1 будет сохраняться как $PWD
.
Например: если текущий каталог ~/workspace/projects/project1$
, то PS1 будет ~/workspace/projects/project1$
Эффект выше в .bashrc будет следующим для вашей PS1:
~$ cd ~/workspace/projects/project1/folder1/test
~/workspace/.../folder1/test$ cd ..
~/workspace/.../project1/folder1$ cd ..
~/workspace/.../project1$ cd ..
~/.../projects$ cd ..
~/workspace$ cd ..
~$
Обратите внимание, как меняется приглашение, когда я меняю каталоги. Дайте мне знать, если это не то, что вы хотели.