Terminal, Eingabeaufforderung geändert in "-Bash-4.2" und Farben verloren

8

Normalerweise war meine Terminal-Eingabeaufforderung

username place$

jetzt zeigt es nur

bash-4.2$

und alle Farbeinstellungen sind verloren gegangen (im Terminalprofil habe ich das gleiche Farbschema, aber es werden nur keine Farben angezeigt)

Ich habe keine Ahnung, was passiert (und ich weiß nicht, wie ich danach suchen soll).

Es ändert sich von nichts, ich habe mit Eclipse und Maven gearbeitet, ein neues Terminal eröffnet und das neue Terminal hatte keine Farben.

Hinweis: Ich habe keine ~ / .bashrc-Datei, aber ein ~ / .bash_profile.

lcjury
quelle
Die Eingabeaufforderung wird durch die Variable PS1 gesetzt, hier können Sie mehr darüber lesen, es gibt auch verschiedene Beispiele für farbige
Eingabeaufforderungen
Geschieht dies 1) Nur wenn Sie sich an einer Konsole anmelden, 2) Nur wenn Sie ein neues GUI-Terminal öffnen, 3) Sowohl 1 als auch 2? Wenn Sie sich bei Nummer 1 nicht sicher sind, wechseln Sie zu einem VT und melden Sie sich an oder versuchen Sie es bash -l.
Goldlöckchen
@ TAFKA'goldilocks 'beide, wenn ich bash -l benutze, kommen die Farben zurück, aber der Promp bleibt bei "bash-4.2 $"
lcjury
Wenn meine Antwort nicht funktioniert, veröffentlichen Sie die Ausgabe echo $PS1in der Login-Version mit den Farben.
Goldlöckchen

Antworten:

10

Die Eingabeaufforderungsvariable $PS1wurde wahrscheinlich nicht festgelegt, daher wird die integrierte Standardeinstellung \s-\v\$verwendet.

Wenn bash interaktiv gestartet wird, wird eine Konfigurationsdatei erstellt, normalerweise entweder ~/.bashrcoder ~/.bash_profile, sofern vorhanden, und auf diese Weise wird eine schickere Eingabeaufforderung festgelegt. Von man bash:

AUFRUF

[...] Wenn bash als interaktive Anmeldeshell oder als nicht interaktive Shell mit der Option --login aufgerufen wird, werden zuerst Befehle aus der Datei / etc / profile gelesen und ausgeführt, sofern diese Datei vorhanden ist. Nach dem Lesen dieser Datei wird nach ~ / .bash_profile, ~ / .bash_login und ~ / .profile in dieser Reihenfolge gesucht [...]

[...] Wenn eine interaktive Shell gestartet wird, die keine Anmeldeshell ist, liest bash Befehle von ~ / .bashrc und führt sie aus , sofern diese Datei vorhanden ist.

Wenn Ihre Eingabeaufforderung nicht festgelegt ist, kann dies in zwei verschiedenen Kontexten auftreten: Anmeldeshells und Nicht-Anmeldeshells. Wenn Sie einen Display-Manager verwenden, um sich direkt bei der GUI anzumelden, treten keine Anmeldeshells auf, es sei denn, Sie wechseln zu einer virtuellen Konsole (über z. B. CtrlAlt+ F1 bis F6). Sie können Ihr Bash-Anmeldeprofil jedoch in der GUI testen, indem Sie eine neue Anmeldeshell explizit öffnen : bash -l.

Bei Nicht-Login-Shells tritt ein Problem auf

Wenn das Problem beispielsweise bei normalen GUI-Terminals auftritt, ~/.bashrcfehlt entweder Ihr Terminal oder es wurde bearbeitet, um die Beschaffung einer globalen Datei wahrscheinlich auszuschließen /etc/bashrc.

  • Wenn ~/.bashrcnicht vorhanden, sollte ein /etc/skel/.bashrcverwendet werden, um es für neue Benutzer zu erstellen. Kopieren Sie diese Datei einfach in Ihr Home-Verzeichnis, und Ihre Standardaufforderung sollte zur nächsten neuen Shell zurückkehren, die Sie öffnen.

  • Wenn ~/.bashrcvorhanden, überprüfen Sie, ob irgendwo eine Zeile vorhanden ist, aus der Folgendes stammt /etc/bashrc:

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

    Wenn nicht, überprüfen Sie, ob diese Datei vorhanden ist (zumindest in den meisten Linux-Distributionen) und fügen Sie eine solche Zeile zu Ihrer hinzu ~/.bashrc.

Problem tritt mit Login-Shells auf

Wenn das Problem sowohl bei Login-Shells als auch bei Nicht-Login-Shells auftritt, ist das Problem wahrscheinlich dasselbe wie oben. Wenn es nur bei Login-Shells auftritt , haben Sie entweder keine der Dateien, die für Login-Shells unter dem obigen INVOCATION-Zitat angegeben sind, oder sie beziehen Ihre nicht ~/.bashrc, was bei den meisten Linux-Distributionen normal ist. Wenn keine dieser Dateien vorhanden ist, erstellen Sie ~/.bash_profileFolgendes:

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

Auf diese Weise können Sie Ihre Konfiguration größtenteils in einer Datei ( ~/.bashrc) speichern .


Wenn Sie unabhängig davon, was Sie tun, keine Eingabeaufforderung erhalten können, können Sie eine erstellen und auf folgende ~/.bashrcWeise einfügen:

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

Dies liegt daran, dass $ PS1 festgelegt ist und einen Standardwert für interaktive Shells hat. Sie möchten ihn auch nicht anders festlegen, da andere Benutzer diesen Wert möglicherweise verwenden, um zu bestimmen, ob es sich um eine interaktive Umgebung handelt.

Die Bash-Manpage enthält einen Abschnitt PROMPTING, in dem beschrieben wird, wie Sie eine Eingabeaufforderung mit dynamischen Funktionen wie Ihrem Benutzernamen und dem aktuellen Arbeitsverzeichnis festlegen, z. B.:

PS1="\u \w:"

Hier finden Sie eine Anleitung zur Verwendung von Farbe . Achten Sie darauf, dass Sie nicht gedruckte Zeichen in \[und einschließen sollten \](dies wird am Ende der Antwort zu Farben erläutert).

Goldlöckchen
quelle
Danke TAFKA!, Mehr als nur eine Antwort, ich habe etwas Neues gelernt :)!
lcjury
1

Fügen Sie dies einfach in ~ / .bashrc und ~ / .bash_profile als root für den betroffenen Benutzer ein.

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

Aziz Zoaib
quelle
0

Musste Cygwin Bash aus Sicherheitsgründen aktualisieren.

die alte Bash = 4.1.10 (4) -Release (i686-pc-cygwin) circa 2009

$ echo $PS1

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

die neue bash = 4.4.12 (3) -Veröffentlichung (i686-pc-cygwin) circa 2016

Um genau das gleiche Erscheinungsbild zu erhalten, musste Folgendes hinzugefügt werden .bashrc:

#

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

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

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

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

cd $HOME

#

Hinweis: einschließlich der cd $HOME

Randy Sp. Z oo
quelle