Como posso encurtar o caminho atual do prompt do bash para uma letra por diretório?

8

Não me lembro onde, mas eu já vi o caminho atual do prompt do bash encurtado de uma maneira interessante: cada diretório contido no caminho (exceto o último) é substituído apenas pela primeira letra. Por exemplo: path/to/some/directory seria reduzido para p/t/s/directory .

Como posso reproduzir esse comportamento?

    
por Anto 08.03.2013 / 02:01

3 respostas

7

Depois de brincar com isso por um tempo, recebi a resposta que você precisa:

Adicione isto ao seu arquivo .bashrc no seu diretório pessoal, saia do terminal e alugue-o e você receberá um aviso.

PS1='$(eval "sps")$ '
sps() {
   echo "$PWD" | sed -r 's|/([^/]{,2})[^/]*|/|g'
}

Ele usa a função declarada sps() para avaliar o caminho toda vez que a variável PS1 , que é o prompt, é exibida

ou seja

/ho/de/De/Ap/Ti$ pwd
/home/deth/Desktop/Apps/Tivo
/ho/de/De/Ap/Ti$ 

Ou ... se você insistir na única letra

PS1='$(eval "sps")$ '
sps() {
   echo "$PWD" | sed -r 's|/(.)[^/]*|/|g'
}

Que exibe:

/h/d/D/A/T$ pwd
/home/deth/Desktop/Apps/Tivo
/h/d/D/A/T$ 
    
por Meer Borg 08.03.2013 / 03:52
2

Para truncar todos os nomes de diretório, exceto o último:

PS1='$(eval "sps")$ '                                                                                
sps() {                                                                                              
    python -c "import sys; dirs = sys.argv[1].split('/'); print '/'.join(d[:1] for d in dirs[:-1]) + '/' + dirs[-1]" $PWD
}
    
por askory 21.05.2014 / 03:09
2

A regex de melhor resposta (de Meer Borg) quebra para diretórios de uma letra, assim:

echo "/home/user/x/next_dir/other_dir" | sed -r 's|/(..)[^/]*|/|g'
/ho/us/x//ot

A função correta seria :

PS1='$(eval "sps")$ '
sps() {
   echo "$PWD" | sed -r 's|/([^/]{,2})[^/]*|/|g'
}

Desculpe, não tenho reputação de comentar sob a resposta original, lol

    
por mario1ua 22.02.2017 / 17:31