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


9

Não me lembro onde, mas já vi o caminho atual do prompt do bash ser reduzido de uma maneira interessante: todos os diretórios contidos no caminho (exceto o último) são substituídos apenas pela primeira letra. Por exemplo: path/to/some/directoryseria reduzido para p/t/s/directory.

Como posso reproduzir esse comportamento?


Você não pode fazer isso diretamente PS1. Você precisaria definir PS1para conter uma variável ( PS1='${SHORT_PWD}\\$') e atualizar essa variável em $PROMPT_COMMAND.
Gilles 'SO- stop be evil' em

@Gilles 'parada SO estar mal' certeza que você pode fazê-lo diretamente, se você usar aspas duplas você precisa barra invertida \$()substituições de comando embora
bac0n

Respostas:


8

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

Adicione isso ao seu arquivo .bashrc no diretório inicial, saia do terminal e alugue-o e você será avisado.

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

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

ie

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

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

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

Que exibe:

/h/d/D/A/T$ pwd
/home/deth/Desktop/Apps/Tivo
/h/d/D/A/T$ 

Obrigado Meer. Meu prompt é realmente remover a user@pcpeça. Como posso lidar com isso?
28415 Alex

3

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
}

Isso não funciona quando eu altero os diretórios?
Aditya Varma

1

encurte todos os nomes, exceto o último sem python:

user:/h/u/D/C/current$ 
sps() {
    echo `dirname $PWD` | sed -r 's|/(.)[^/]*|/\1|g'
}
PS1='\u:$$(eval "sps")/\W\$ '
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.