Допилил сабж до годного состояния - реализовал худо-бедно обрезку слишком длинной $PWD. Других особых изменений нет. Код страшен аки ядерная война :-)
# приглашение (adam2)
function prompt_adam2(){
local WHOAMI=$(whoami);
local HOSTNAME=$(hostname);
local USER_AT_HOST_LEN=$((${#WHOAMI}+${#HOSTNAME}+3));
local WIDTH=$(tput cols);
local MYPWD="$PWD";
if [[ "$HOME" == ${MYPWD:0:${#HOME}} ]]; then
local PWD_LEN=$((${#MYPWD}-${#HOME}+3));
local MYNEWPWD="~${MYPWD:${#HOME}}";
else
local PWD_LEN=$((${#MYPWD}+2));
local MYNEWPWD="$MYPWD";
fi
local DASHES=$((${WIDTH}-${USER_AT_HOST_LEN}-${PWD_LEN}-3));
local PWD_LIM=$((${WIDTH}-${USER_AT_HOST_LEN}-12));
if (( ${#MYNEWPWD} >= ${PWD_LIM} )); then
local TRUNC_SEQ="/.../";
PWD_LEN=${#MYNEWPWD};
if [[ "$HOME" == ${MYPWD:0:${#HOME}} ]]; then
MYNEWPWD="~"$TRUNC_SEQ"${MYNEWPWD:${PWD_LEN}-${PWD_LIM}:999}";
DASHES=1;
else
MYNEWPWD=""$TRUNC_SEQ"${MYNEWPWD:${PWD_LEN}-${PWD_LIM}:999}";
DASHES=1;
fi
fi
if [ "$1" == "dashes" ]; then
for (( i=1; i<=${DASHES}; i++)); do
echo -n '-';
done
elif [ "$1" == "mypwd" ]; then
echo -n ${MYNEWPWD};
fi
}
export PS1='\[\e[36;1m\].\[\e[0m\]\[\e[36m\]-\[\e[30;1m\](\[\e[0m\]\
\[\e[32;1m\]$(prompt_adam2 mypwd)\[\e[0m\]\[\e[30;1m\])\[\e[0m\]\[\e[36m\]$(prompt_adam2 dashes)\
\[\e[30;1m\](\[\e[0m\]\[\e[36m\]\u\[\e[1m\]@\[\e[0m\]\[\e[36m\]\h\
\[\e[30;1m\])\[\e[0m\]\[\e[36m\]-\[\e[0m\]\n\
\[\e[36;1m\]\`\[\e[0m\]\[\e[36;1m\]-\[\e[0m\]\[\e[36m\]-\[\e[0m\]\
\[\e[37;1m\]>\[\e[0m\] '
export PS2='\[\e[37;1m\]> \[\e[0m\]'
Пихать в ~/.bashrc