Como posso limitar o número de diretórios no meu prompt?

3

No meu Mac OS X 10.6, tenho meu prompt definido como

PS1='\[3[01;32m\][\w\[3[00m\]\[3[01;34m\]$(__git_ps1 " (%s)")3[01;32m\]]\[3[00m\]\$ '

Como posso limitar o número de diretórios no meu prompt? A \w parte?

Isso ocorre porque, quando eu me aprofundo em uma árvore de diretórios, o prompt ocupa toda a largura do terminal.

    
por michael 08.02.2012 / 22:33

3 respostas

4

você já usa uma função em seu prompt para o seu nome de ramificação git provavelmente, o que é legal, então faça o mesmo em seu caminho:

# 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='\[3[01;32m\][$(__shortpath "\w" 50)\[3[00m\]\[3[01;34m\]$(__git_ps1 " (%s)")3[01;32m\]]\[3[00m\]\$ '

Limitará o caminho para os últimos 50 caracteres. Isto é um exemplo. Você também pode pensar em cortar apenas em uma barra, mas isso torna mais difícil.

# 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='\[3[01;32m\][$(__droppath "\w" 50)\[3[00m\]\[3[01;34m\]$(__git_ps1 " (%s)")3[01;32m\]]\[3[00m\]\$ '

Talvez também seja uma boa idéia proteger o loop while verificando se o tamanho novo é menor que o tamanho antigo (caso contrário, saia) ou se o tamanho novo é 0, caso em que você pode retornar o último valor de $ p - ou continuar __shortpath.

    
por 08.02.2012 / 22:56
3

Você olhou para PROMPT_DIRTRIM (configuração bash, check man bash):

PROMPT_DIRTRIM

If set to a number greater than zero, the value is used as the number of trailing directory components to retain when expanding the \w and \W prompt string escapes (see PROMPTING below). Characters removed are replaced with an ellipsis.

    
por 20.04.2016 / 20:24
1

Pessoalmente, não tenho nenhum caminho no meu prompt, não gosto de como ele move a localização do prompt, mesmo que seja cortada.

Eu coloquei a localização atual na barra de título:

USER=$(/usr/bin/id -un)
HOSTNAME=$(uname -n)
HOSTNAME=${HOSTNAME%%.*}
PROMPT_COMMAND='echo -ne "\e]0;$USER@${HOSTNAME}: $(pwd -P)\a"'

O comando para USER obter o usuário atual é flags do linux / gnu, os flags do MacOSX / bsd podem ser diferentes.

    
por 09.02.2012 / 00:11

Tags