Como posso obter meu prompt do PS1 para mostrar o horário, usuário, host, diretórios e git branch?

3

Eu vi outros adicionarem todas essas informações ao prompt do PS1.

Eu gosto das abordagens que colorem os elementos e também fazem um retorno de carro no final

    
por Michael Durrant 04.05.2014 / 15:30

3 respostas

4

Para:

Adicioneissoao.bashrcfile

HOST='3[02;36m\]\h'HOST=''$HOSTparse_git_branch(){gitbranch2>/dev/null|sed-e'/^[^*]/d'-e's/*\(.*\)//';}TIME='3[01;31m\]\t3[01;32m\]'LOCATION='3[01;34m\]'pwd|sed"s#\(/[^/]\{1,\}/[^/]\{1,\}/[^/]\{1,\}/\).*\(/[^/]\{1,\}/[^/]\{1,\}\)/\{0,1\}#_#g"''
BRANCH=' 3[00;33m\]$(parse_git_branch)\[3[00m\]\n\$ '
PS1=$TIME$USER$HOST$LOCATION$BRANCH
PS2='\[3[01;36m\]>'

Isso funcionará no Ubuntu e no OSX. Note que eu tenho que ter o HOST 'construído' em duas linhas para mostrar da mesma maneira tanto no Linux quanto no OSX. Não descobri o motivo, mas funciona.

Observe o uso do diretório "_", que ajuda a evitar que o aninhamento de diretório longo empurre o prompt para 2 linhas mostrando apenas os diretórios 3 e 3 inferiores. menos de 7 mostra todos eles.

    
por 04.05.2014 / 15:30
4

Eu uso uma linha PS1 complexa na minha máquina. O seguinte conjunto de códigos cria minha linha PS1. Coloque-o no seu arquivo bashrc se você quiser usá-lo. Não tenho certeza se funciona em sistemas OSX, mas meu palpite seria não.

source "/usr/share/git/completion/git-prompt.sh"

GIT_PS1_SHOWDIRTYSTATE=1;
GIT_PS1_SHOWCOLORHINTS=1;
GIT_PS1_SHOWUNTRACKEDFILES=1;

SH_WHITE="\[3[1;37m\]"
SH_BLUE="\[3[1;34m\]"
SH_RED="\[3[1;31m\]"
SH_GREEN="\[3[1;32m\]"
SH_YELLOW="\[3[1;33m\]"

BL_ANGLE="244"
TL_ANGLE="244"
HORIZ_LINE="240"

BATT="\$(acpi -b | awk '{print \}' | cut -b1-3)"
FILES_STAT="\$(ls -1 | wc -l | sed 's: ::g')"
FILES_SIZE="\$(ls -lah | grep -m 1 total | sed 's/1:total //')b"
GIT_PS1='$(__git_ps1 "(%s)")'

if [ $UID -eq 0 ]; then
PS1='\[\e[0;31m\]\u\[\e[m\]\[\e[1;37m\]@\h\[\e[m\] \[\e[1;34m\]\W\[\e[m\] \[\e[1;32m\]\$\[\e[m\] \[\e[1;32m\]'
elif [ -n "$SSH_CLIENT" ]; then
    PS1='\[\e[0;31m\](SSH)\[\e[m\]\[\e[1;37m\]\u@\h\[\e[m\] \[\e[1;34m\]\W\[\e[m\] \[\e[1;32m\]$(acpi -b | awk "{print \}" | cut -b1-3) $(__git_ps1 "(%s) ")\$\[\e[m\] \[\e[1;32m\]'
else
PS1="\n"${SH_WHITE}${TL_ANGLE}"("${SH_BLUE}"\u"${SH_WHITE}"@"${SH_RED}"\h"${SH_WHITE}")"${HORIZ_LINE}"("${SH_GREEN}"\$?"${SH_WHITE}")"${HORIZ_LINE}"("${SH_GREEN}${BATT}${SH_WHITE}")"${HORIZ_LINE}"("${SH_GREEN}"\@ \d"${SH_WHITE}")\n"${BL_ANGLE}${HORIZ_LINE}"("${SH_GREEN}"\w"${SH_WHITE}")"${HORIZ_LINE}"("${SH_YELLOW}${FILES_STAT}" files, "${FILES_SIZE}${SH_WHITE}")"${HORIZ_LINE}${SH_BLUE}${GIT_PS1}${SH_WHITE}"> "${SH_GREEN}
fi
trap 'echo -ne "\e[0m"' DEBUG

Atualmente estou no trabalho e não tenho a linha PS1 acima definida nesta máquina. Vou atualizar essa resposta com uma captura de tela de como é a aparência quando eu voltar. Mas até então deixe-me tentar explicar o que isso faz:

  1. Nós fornecemos o script de conclusão do git. Eles têm um semelhante para zsh no mesmo local. Isso nos dá a importante função __git_ps1 para uso na linha PS1. Este script não produz nada se você não estiver em um repositório git.
  2. Defina algumas variáveis para definir que tipo de informação sobre as ramificações do git é mostrada na linha PS1.
  3. Configurei algumas variáveis para facilitar o gerenciamento da enorme linha PS1 que tenho. Esses caracteres de escape eu desenhei linhas angluar no console. As variáveis SH_* são atalhos para cores. São seqüências ANSI que farão com que o terminal exiba a saída colorida. Finalmente, definimos algumas variáveis que executam algumas ações, como obter o status da bateria e o número de arquivos no diretório atual.
  4. Aqui definimos as linhas PS1 reais. Como eu uso essa configuração globalmente, primeiro verifico se o usuário atual é root ou não. Para root, eu tenho uma linha PS1 muito simples que exibe o nome de usuário em vermelho. Se você está se conectando via SSH, você não quer uma linha tão complexa e, portanto, novamente mostramos algo mais simples. Senão, exiba a linha PS1 completa. Pode demorar um pouco para entender essa linha. É uma PS1 de 2 linhas que exibe muitas informações.
  5. A última linha, trap ... , é necessária para que as configurações de cor não sejam eliminadas em toda a saída. O último ${SH_GREEN} faz com que minha entrada fique na cor verde. No entanto, não quero que todos os resultados de todos os programas também sejam coloridos em verde. Daí a declaração trap .

    
por 04.05.2014 / 18:28
0

'

PS1_DEBIAN_CHROOT='${debian_chroot:+($debian_chroot)}'
PS1_TIME='3[01;31m\]\t 3[01;32m\]'
PS1_USERNAME='\[\e[1;36m\]\u\e[1;37m\]@\e[1;32m\]\h\[3[00m\]'
PS1_LOCATION='\[3[01;34m\]\w\[3[00m\]'
parse_git_branch () { git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)//'; }
PS1_GIT=' \[3[00;33m\]$(parse_git_branch)\[3[00m\]\]'

PS1=$PS1_DEBIAN_CHROOT$PS1_TIME$PS1_USERNAME':'$PS1_LOCATION$PS1_GIT'\n\$ '
PS2='\[3[01;36m\]>'

'

    
por 30.08.2015 / 03:59

Tags