Aqui estão duas alternativas, dependendo do seu objetivo final.
Mostrar apenas o elemento de diretório à direita
PS1='^[]0;${USER}@${HOST}: ${PWD##*/}^Gksh$ '
Isso simplesmente introduz a substituição do parâmetro ##
em seu PS1 existente, a fim de eliminar personagens avidamente até a barra final. Isso encurtará a parte PWD
da string de prompt do PS1, independentemente do tamanho.
Apenas encurte strings PWD longas
Divulgação completa, recebi os "ossos" disso de uma das respostas a essa pergunta sobre estouro de pilha:
Como exibir um prompt personalizado no KornShell para mostrar o nome do host e o diretório atual?
... então modificou de acordo. Em suma, aliases cd
a uma função interna. Essa função emula o comportamento original de cd
, mas faz alguma string "matemática" para determinar o novo prompt do PS1. Eu fiz sua pergunta literalmente, então se você não quiser "..." prefixando os nomes de diretório longos, remova essa string da linha P=...
e também remova a +3
na linha matemática acima dela.
function _cd {
directory=$1
pattern=$2
# First cd to the directory
if [ "$pattern" ]
then
\cd "$directory" "$pattern"
elif [ "$directory" ]
then
\cd "$directory"
else
\cd
fi
# set this value to taste
MAXLEN=20
LEN=${#PWD}
P=$PWD
# if PWD is "too" long, trim it
if [ $LEN -gt $MAXLEN ]
then
# the 3 is for the literal "..."
START=$(( LEN - MAXLEN + 3 ))
P="..."$(echo $PWD | cut -c ${START}-)
fi
PS1="^[]0;${USER}@${HOST}: $P^Gksh\$ "
}
alias cd="_cd"
Claro, enquanto escrevo isso, uma terceira opção vem à mente - para usar o código alias / internal-function, mas em vez de cut
ing o string, use a substituição do parâmetro ##
nele para tira os elementos do diretório como no primeiro exemplo.