Terminal, Prompt alterado para “-Bash-4.2” e cores perdidas

8

Geralmente meu prompt de terminal era

username place$

agora mostra apenas

bash-4.2$

e todas as configurações de cores foram perdidas (no perfil do terminal, tenho o mesmo esquema de cores, mas ele simplesmente não mostra cores)

Não faço ideia do que acontece (e não sei como procurar por isso).

Isso muda do nada, eu estava trabalhando com eclipse e maven, abri um novo terminal e o novo terminal não tinha cores.

Nota: Não tenho um arquivo ~ / .bashrc, mas tenho um ~ / .bash_profile.

lcjury
fonte
O prompt é definido pelo PS1 variável, aqui você pode ler mais sobre isso, há também vários exemplos de avisos coloridos
RSFalcon7
Isso acontece 1) Apenas quando você efetua login em um console, 2) Somente quando você abre um novo terminal da GUI, 3) 1 e 2? Se você não tiver certeza sobre o número 1, mude para um VT e faça login ou tente bash -l.
precisa saber é o seguinte
@ TAFKA'goldilocks' tanto, se eu usar o bash -l as cores voltar, mas os alambiques PROMP em "bash-4.2 $"
lcjury
Se minha resposta não funcionar, poste a saída echo $PS1na versão de login com as cores.
GOLDILOCKS

Respostas:

10

A variável prompt $PS1provavelmente não foi definida, portanto o padrão interno \s-\v\$é usado.

Quando o bash é iniciado interativamente, ele origina um arquivo de configuração, geralmente um ~/.bashrcou ~/.bash_profile, presumindo que exista, e é assim que um prompt mais sofisticado é definido. De man bash:

INVOCAÇÃO

[...] Quando o bash é chamado como um shell de logon interativo ou como um shell não interativo com a opção --login, ele primeiro lê e executa comandos do arquivo / etc / profile, se esse arquivo existir. Depois de ler esse arquivo, ele procura por ~ / .bash_profile, ~ / .bash_login e ~ / .profile, nessa ordem [...]

[...] Quando um shell interativo que não é um shell de login é iniciado, o bash lê e executa comandos de ~ / .bashrc, se esse arquivo existir.

Não ter seu conjunto de prompt pode ocorrer em dois contextos diferentes, shells de login e shells de não login. Se você usar um gerenciador de exibição para efetuar login diretamente na GUI, não encontrará shells de login, a menos que mude para um console virtual (via, por exemplo, CtrlAlt+ F1 a F6). No entanto, você pode testar o seu perfil de login festa na GUI, abrindo um novo shell de login explicitamente: bash -l.

Problema ocorre com shells sem logon

Se o problema ocorrer com, por exemplo, terminais GUI normais, o seu ~/.bashrcestá faltando ou foi editado para excluir o fornecimento de um arquivo global, provavelmente /etc/bashrc.

  • Se ~/.bashrcnão existir, deve ser /etc/skel/.bashrcusado para criá-lo para novos usuários. Simplesmente copie esse arquivo no diretório inicial e seu prompt padrão retornará para o próximo novo shell que você abrir.

  • Se ~/.bashrcexistir, verifique se há uma linha em algum lugar que origine /etc/bashrc:

    . /etc/bashrc
      -OR-
    source /etc/bashrc

    Caso contrário, verifique se esse arquivo existe (deveria, pelo menos na maioria das distribuições Linux) e adicione essa linha ao seu ~/.bashrc.

Problema ocorre com shells de logon

Se o problema ocorrer com shells de login e shells sem login, o problema provavelmente é o mesmo que acima. Se ocorrer apenas com shells de login, você não possui um dos arquivos mencionados para shells de login sob a citação de INVOCATION acima ou eles não fornecem o seu ~/.bashrc, o que é normal na maioria das distribuições Linux. Se nenhum desses arquivos existir, crie ~/.bash_profilecom isso:

if [ -f ~/.bashrc ]; then
  . ~/.bashrc
fi

Isso permite que você mantenha sua configuração em um arquivo ( ~/.bashrc).


Se não importa o que você faça, você não poderá receber um aviso de volta, crie um e coloque-o ~/.bashrcdesta maneira:

if [ "$PS1 ]; then
    PS1= .... # see below
fi

Isso ocorre porque $ PS1 está definido e possui um valor padrão para shells interativos, e você não deseja defini-lo caso contrário, outras coisas podem usar esse valor para determinar se este é um ambiente interativo.

A página de manual do bash contém uma seção PROMPTING, que descreve como definir um prompt com recursos dinâmicos, como seu nome de usuário e diretório de trabalho atual, que seriam, por exemplo:

PS1="\u \w:"

Há um guia para usar cores aqui . Preste atenção ao fato de incluir caracteres não impressos em ( \[e \]há uma discussão sobre isso no final da resposta sobre cores).

Cachinhos Dourados
fonte
Obrigado TAFKA !, mais do que apenas uma resposta, aprendi algo novo :)!
Lcjury
1

Basta colar isso em ~ / .bashrc e ~ / .bash_profile como root no usuário afetado.

# Source global definitions if [ -f /etc/bashrc ]; then . /etc/bashrc fi

Aziz Zoaib
fonte
0

Teve que atualizar o Cygwin bash por razões de segurança.

o antigo bash = versão 4.1.10 (4) (i686-pc-cygwin) por volta de 2009

$ echo $PS1

\[\e]0;\w\a\]\n\[\e[32m\]\u@\h \[\e[33m\]\w\[\e[0m\]\n\$

o novo bash = lançamento do 4.4.12 (3) (i686-pc-cygwin) por volta de 2016

Para obter exatamente a mesma aparência, é necessário adicionar .bashrc:

#

GREEN="\[$(tput setaf 2)\]"

YELLOW="\[$(tput setaf 3)\]"

RESET="\[$(tput sgr0)\]"

PS1="\n${GREEN}\u@\h ${YELLOW}\w${RESET}\n$ "

cd $HOME

#

nota: incluindo o cd $HOME

Randy Sp
fonte