PS1 condicional

3

Estou basicamente tentando fazer com que meu PS1 fique assim quando estiver em um repositório do git:

$ ~/Projects/Blah (master):

Ou se eu não estiver em um repositório do Git, quero que seja assim:

$ ~/Projects/Blah:

Esta é minha PS1 atual:

export PS1="$ \w \$(__git_ps1): "

Funciona para a saída do repositório do git, mas o problema é que, se eu não estiver em um repositório do git, a saída será assim:

$ ~/Projects/Blah :

Eu realmente não quero esse espaço lá se não for um repositório do git, existe alguma maneira de especificar isso no meu PS1?

    
por saadq 03.05.2016 / 21:25

3 respostas

2

O que eu faço para esse tipo de coisa é alterar o valor de PS1 quando eu altero os diretórios. Isso é trivial em zsh, que executa o comando chpwd ; Isso pode ser feito no bash por definindo wrappers em torno de cd e amigos .

cd () { builtin cd "$@" && chpwd; }
pushd () { builtin pushd "$@" && chpwd; }
popd () { builtin popd "$@" && chpwd; }
chpwd () {
  if git rev-parse --show-toplevel 2>/dev/null >/dev/null; then
    PS1='$ \w $(__git_ps1): '
  else
    PS1='$ \w: '
  fi
}
    
por 04.05.2016 / 02:12
1

Acabei usando este arquivo .git-prompt.sh . Passos para que isso funcione:

  1. Crie um arquivo chamado .git-prompt.sh em seu diretório pessoal ( ~/.git-prompt.sh ) e copie o código do link acima para ele.
  2. No seu arquivo .bash_profile ou .bashrc , adicione esta linha: source ~/.git-prompt.sh
  3. Altere seu PS1 para este: PS1='\n$ \w$(__git_ps1 " (%s)"): '
por 04.05.2016 / 10:41
0

Eu uso um function para definir meu prompt dinamicamente. Aqui está minha função específica, definida no meu script de inicialização do ambiente de desenvolvimento:

function prompt_cmd
{
  # Tell the terminal application (using escape sequences) what the CWD is.
  # (this comes from /etc/bashrc)
  update_term_cwd

  if [[ "$ORIG_PS1" == "" ]]; then
    export ORIG_PS1=$PS1
  fi

  if [[ "$CURRENT_PROJECT" == "" ]]; then
    export PS1=$ORIG_PS1
  else
    if [[ "$PWD" == "$DEV_HOME/projects/$CURRENT_PROJECT"* ]]; then
       PWD_COLOR=''
    else
       PWD_COLOR='\[\e[0;31m\]'
    fi
    export PS1="\[\e[0;32m\]$CURRENT_PROJECT\[\e[m\]:$PWD_COLOR\W\[\e[m\]$ "
  fi
}

(define a parte do caminho do prompt para vermelho se acontecer de eu sair do projeto em que acho que estou!)

... então diga ao bash para usar a função:

export PROMPT_COMMAND=prompt_cmd
    
por 04.05.2016 / 10:53

Tags