Diretório atual abreviado no prompt do shell?

20

vim tem um recurso muito interessante que utiliza em seus caminhos quando eles são um pouco longos:

Abrevia o caminho para o documento na guia na parte superior. Existe uma maneira de fazer algo semelhante a isso, então meu prompt bash não se parece com isto:

rfkrocktk@work-laptop ~/Documents/Projects/Work/maventest/src/main/java/com/tkassembled/ $ 
    
por Naftuli Kay 14.12.2011 / 18:49

6 respostas

12

Experimente este :

PROMPT_COMMAND='PS1X=$(perl -pl0 -e "s|^${HOME}|~|;s|([^/])[^/]*/|$""1/|g" <<<${PWD})'

ou, pura bash:

PROMPT_COMMAND='PS1X=$(p="${PWD#${HOME}}"; [ "${PWD}" != "${p}" ] && printf "~";IFS=/; for q in ${p:1}; do printf /${q:0:1}; done; printf "${q:1}")'

então

PS1='\u@\h ${PS1X} $ '

produz (observe o ~ para ${HOME} ):

rfkrocktk@work-laptop ~/D/P/W/m/s/m/j/c/tkassembled $

Eu melhorei minha resposta graças a @ enzotib

    
por 14.12.2011 / 22:30
16

Semelhante à resposta do @nicerobot, mas um pouco mais curto:

PROMPT_COMMAND='pwd2=$(sed "s:\([^/]\)[^/]*/:/:g" <<<$PWD)'
PS1='\u@\h:$pwd2\$ '

Isso mostrará a seguinte saída de exemplo:

enzotib@acer:/h/enzotib$ cd
enzotib@acer:/h/enzotib$ cd /usr/share/doc/acpid/examples/
enzotib@acer:/u/s/d/a/examples$
    
por 15.12.2011 / 10:00
11

Eu gosto de PROMPT_DIRTRIM no bash ...

export PROMPT_DIRTRIM=2

mudará seu prompt de exemplo para ...

rfkrocktk@work-laptop ../com/tkassembled/ $

Funciona para mim.

    
por 16.12.2011 / 07:13
4

Adicionando a resposta da enzotib , o seguinte snippet irá:

  1. Converte /Path/To/Your/Home/ para ~/ (portanto, um caminho será ~/a/b/c em vez de /P/T/Y/H/a/b/c )
  2. Use a primeira letra de um 'arquivo de ponto' em vez de mostrar apenas o ponto ( /a/./c/d se tornará /a/.b/c/d ):

    PROMPT_COMMAND='PS1_PATH=$(sed "s:\([^/\.]\)[^/]*/:/:g" <<< ${PWD/#$HOME/\~})'
    export PS1='\u@\h:$PS1_PATH\$ '
    

Certifique-se de usar aspas simples ou o bash irá expandi-lo prematuramente.

    
por 08.04.2016 / 00:27
3

O formato para uso em PS1 é \W (consulte a seção PROMPTING na página bash man).

PS1="\u@\h \W\$ "

E você pode querer ler as outras opções lá, você pode fazer algumas coisas legais com sua linha de comando.

    
por 14.12.2011 / 19:11
1

Eu amo a saída do exemplo do nicerobot, mas encontrei um problema. Eu tenho um diretório que tem um hífen nele, A-E , e estava vendo -E como um argumento para printf quando era meu diretório de trabalho atual. Para corrigir isso, adicionei -- ao último printf e adicionei aspas ao redor da saída, caso não haja nada para a saída:

p="${PWD#${HOME}}"; [ "${PWD}" != "${p}" ] && printf "~";IFS=/; for q in ${p:1}; do printf /${q:0:1}; done; printf -- "${q:1}"
    
por 25.01.2016 / 00:58

Tags