Terminal, invite changée en «-Bash-4.2» et couleurs perdues

8

Habituellement, mon invite de terminal était

username place$

maintenant ça ne montre que

bash-4.2$

et tous les paramètres de couleur ont été perdus (sur le profil du terminal, j'ai le même schéma de couleurs, mais il n'affiche pas les couleurs)

Je n'ai aucune idée de ce qui se passe (et je ne sais pas comment le rechercher).

Ça change de rien, je travaillais avec eclipse et maven, j'ai ouvert un nouveau terminal et le nouveau terminal n'avait pas de couleurs.

Remarque: je n'ai pas de fichier ~ / .bashrc, mais j'ai un fichier ~ / .bash_profile.

lcjury
la source
L'invite est définie par la variable PS1, ici vous pouvez en savoir plus à ce sujet, il existe également divers exemples d'invites colorées
RSFalcon7
Cela se produit-il 1) uniquement lorsque vous vous connectez sur une console, 2) uniquement lorsque vous ouvrez un nouveau terminal GUI, 3) à la fois 1 et 2? Si vous n'êtes pas sûr de # 1, passez à un VT et connectez-vous, ou essayez bash -l.
goldilocks
@ TAFKA'goldilocks 'les deux, si j'utilise bash -l les couleurs reviennent, mais le prompt reste à "bash-4.2 $"
lcjury
Si ma réponse ne fonctionne pas, postez la sortie de echo $PS1dans la version de connexion avec les couleurs.
goldilocks

Réponses:

10

La variable d'invite $PS1n'a probablement pas été définie, donc la valeur par défaut intégrée \s-\v\$est utilisée.

Lorsque bash démarre de manière interactive, il source un fichier de configuration, généralement soit ~/.bashrcou ~/.bash_profile, en supposant qu'ils existent, et c'est ainsi qu'une invite plus sophistiquée est définie. De man bash:

INVOCATION

[...] Lorsque bash est invoqué en tant que shell de connexion interactif, ou en tant que shell non interactif avec l'option --login, il lit et exécute d'abord les commandes du fichier / etc / profile, si ce fichier existe. Après avoir lu ce fichier, il recherche ~ / .bash_profile, ~ / .bash_login et ~ / .profile, dans cet ordre [...]

[...] Lorsqu'un shell interactif qui n'est pas un shell de connexion est démarré, bash lit et exécute les commandes de ~ / .bashrc, si ce fichier existe.

Le fait de ne pas avoir votre ensemble d'invites peut se produire dans deux contextes différents, les shells de connexion et les shells sans connexion. Si vous utilisez un gestionnaire d'affichage pour vous connecter directement à l'interface graphique, vous ne rencontrez pas de shell de connexion à moins que vous ne basculiez vers une console virtuelle (via, par exemple CtrlAlt+ F1 à F6). Cependant, vous pouvez tester votre profil de connexion bash dans l'interface graphique en ouvrant un nouveau shell de connexion explicitement: bash -l.

Un problème se produit avec les shells sans connexion

Si le problème se produit avec, par exemple, des terminaux GUI normaux, alors soit votre ~/.bashrcest manquant, soit il a été modifié pour exclure le sourcing d'un fichier global, probablement /etc/bashrc.

  • Si ~/.bashrcn'existe pas, il devrait y avoir un /etc/skel/.bashrcutilisé pour le créer pour les nouveaux utilisateurs. Copiez simplement ce fichier dans votre répertoire personnel et votre invite par défaut devrait revenir pour le prochain nouveau shell que vous ouvrez.

  • Si ~/.bashrcexiste, vérifiez s'il y a une ligne quelque part qui source /etc/bashrc:

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

    Sinon, vérifiez si ce fichier existe (il devrait, au moins sur la plupart des distributions Linux) et ajoutez une telle ligne à votre fichier ~/.bashrc.

Un problème se produit avec les shells de connexion

Si le problème se produit avec des shells de connexion ainsi que des shells sans connexion, le problème est probablement le même que ci-dessus. Si cela se produit uniquement avec les shells de connexion, vous n'avez pas l'un des fichiers mentionnés pour les shells de connexion sous la citation INVOCATION ci-dessus, ou ils ne vous fournissent pas ~/.bashrcce qui est normal sur la plupart des distributions Linux. Si aucun de ces fichiers n'existe, créez-le ~/.bash_profileavec ceci:

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

Cela vous permet, pour la plupart, de conserver votre configuration dans un seul fichier ( ~/.bashrc).


Si, quoi que vous fassiez, vous ne pouvez pas récupérer une invite, vous pouvez en créer une et la mettre de ~/.bashrccette façon:

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

Cela est dû au fait que $ PS1 est défini et a une valeur par défaut pour les shells interactifs, et vous ne voulez pas la définir autrement car d'autres choses peuvent utiliser cette valeur pour déterminer s'il s'agit d'un environnement interactif.

La page de manuel bash contient une section PROMPTING qui décrit comment définir une invite avec des fonctionnalités dynamiques telles que votre nom d'utilisateur et votre répertoire de travail actuel, qui seraient, par exemple:

PS1="\u \w:"

Il y a un guide pour utiliser la couleur ici . Faites attention au fait que vous devez inclure des caractères non imprimés dans \[et \](il y a une discussion à ce sujet à la fin de la réponse sur les couleurs).

boucle d'or
la source
Merci TAFKA !, plus qu'une simple réponse, j'ai appris quelque chose de nouveau :)!
lcjury
1

Collez simplement ceci dans ~ / .bashrc et ~ / .bash_profile en tant que root sur l'utilisateur concerné.

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

Aziz Zoaib
la source
0

J'ai dû mettre à niveau Cygwin bash pour des raisons de sécurité.

l'ancien bash = 4.1.10 (4) -release (i686-pc-cygwin) vers 2009

$ echo $PS1

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

le nouveau bash = 4.4.12 (3) -release (i686-pc-cygwin) vers 2016

Pour obtenir exactement la même apparence, il fallait ajouter à .bashrc:

#

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

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

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

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

cd $HOME

#

note: y compris le cd $HOME

Randy Sp
la source