Primeiro, você pode simplesmente querer alterar o \w
com \W
. Dessa forma, apenas o nome do diretório atual é impresso e não todo o caminho:
terdon@oregano:/home/mydirectory1/second_directory_with_a_too_long_name/my_actual_directory_with_another_long_name $ PS1="\u@\h:\W \$ "
terdon@oregano:my_actual_directory_with_another_long_name $
Isso ainda não será suficiente se o próprio nome do diretório for muito longo. Nesse caso, você pode usar a variável PROMPT_COMMAND
para isso. Esta é uma variável bash especial cujo valor é executado como um comando antes de cada prompt ser mostrado. Portanto, se você definir isso para uma função que defina o prompt desejado com base no comprimento do caminho do seu diretório atual, você poderá obter o efeito desejado. Por exemplo, adicione essas linhas ao seu ~/.bashrc
:
get_PS1(){
limit=${1:-20}
if [[ "${#PWD}" -gt "$limit" ]]; then
## Take the first 5 characters of the path
left="${PWD:0:5}"
## ${#PWD} is the length of $PWD. Get the last $limit
## characters of $PWD.
right="${PWD:$((${#PWD}-$limit)):${#PWD}}"
PS1="\[3[01;33m\]\u@\h\[3[01;34m\] ${left}...${right} \$\[3[00m\] "
else
PS1="\[3[01;33m\]\u@\h\[3[01;34m\] \w \$\[3[00m\] "
fi
}
PROMPT_COMMAND=get_PS1
O efeito é assim:
terdon@oregano ~ $ cd /home/mydirectory1/second_directory_with_a_too_long_name/my_actual_directory_with_another_long_name
terdon@oregano /home...th_another_long_name $