Reverse Exec Bash

8

Ich benutze Debian und heute habe ich getippt:

exec bash

in meinem terminal und irgendwie hat sich das user@xxxgeändert bash-4.4.

Wie bekomme ich das zurück user@xxx? Ich denke, es ist besser für mich, weil es zum Beispiel den Pfad zu meinem aktuellen Ordner usw. anzeigt.

KronwarsCZ
quelle
Warum machst du das überhaupt exec bash?
Marcelm
1
exec bashist eine gute Möglichkeit, eine saubere Shell zu erhalten und Ihre ~/.bashrcoder eine andere Konfigurationsdatei neu zu laden, die neu geladen werden soll.
Matthieu Moy
7
Sie können einen execVorgang nicht rückgängig machen - er ersetzt Ihren aktuellen Prozess durch einen neuen. Der alte Prozess ist tot und weg - Sie können Ihren neuen Prozess möglicherweise durch etwas ersetzen, das eher dem alten ähnelt , aber Sie können die spezifische / tatsächliche / ursprüngliche Instanz nicht zurückerhalten.
Charles Duffy
2
Wenn dies eine GUI ist, schließen Sie das Terminal-Emulator-Fenster und öffnen Sie ein neues;)
Zanna

Antworten:

21
exec bash -l

Dies wird ersetzt die aktuelle Shell - Sitzung mit einem bashShell gestartet als Login - Shell. Eine Anmeldeshell liest Ihre .bash_profile(oder .bash_loginoder .profile, je nachdem, was zuerst gefunden wird) und andere Dateien, in denen Ihre Eingabeaufforderung definiert sein kann.

Mit exec bashhaben Sie die aktuelle Shell-Sitzung durch eine interaktive Shell ersetzt. Dies wird .bashrcaus Ihrem Home-Verzeichnis gelesen . Wenn Sie dort keine Eingabeaufforderung festlegen, wird die Standardaufforderung bashangezeigt.

Ohne das hätten execSie einfach exitzu Ihrer alten Shell-Sitzung zurückkehren können. Mit dem execist die alte Sitzung nun weg.

Sie können die Shell auch einfach verlassen und eine neue starten.

Kusalananda
quelle
5
@KronwarsCZ Es ist sehr selten, dass Sie die Shell-Startdateien in ändern müssen /etc. Es ist üblicher, das Verhalten von Benutzer zu Benutzer in den Startdateien der privaten Shell zu ändern.
Kusalananda
0

Das user@xxxnennt man die "Eingabeaufforderung". Sie wird von der PS1Umgebungsvariablen festgelegt. In Bash ist der Standardwert bash-<version>völlig nutzlos, aber im Prinzip sollte eine Bash-Konfigurationsdatei ihn immer auf etwas Besseres setzen.

Ein häufiger Fall, in dem Sie dies erhalten würden, ist, wenn Sie gerade eine ~/.bashrcDatei erstellt haben, die diese nicht enthält /etc/profile. Ohne diese Datei fiel bash auf zurück /etc/profileund Sie erhielten die Standardkonfiguration Ihres Systems. Bei einer leeren oder minimalistischen ~/.bashrcKonfiguration wird nur Ihre eigene Konfiguration geladen, und Sie profitieren nicht von dem, was Ihre Distribution oder Ihr Systemadministrator eingegeben hat /etc/profile.

Lösung: Fügen Sie dies zu Ihrem ~/.bashrc:

if [ -f /etc/profile ]; then
    . /etc/profile
fi

Alternativ können Sie Ihre Eingabeaufforderung selbst festlegen, indem Sie Folgendes hinzufügen (nach dem obigen Snippet):

PS1="\u\h@\\$ "

(Sie können das, was in der Eingabeaufforderung angezeigt wird, anpassen, es farbenfroh gestalten und alles mit Tools wie http://ezprompt.net/ )

Matthieu Moy
quelle
3
Schauder Ich bin mir ziemlich sicher, dass Sie das in Ihrer .bashrc wirklich nicht wollen, besonders wenn / etc / profile Ausgabe liefert.
Joshua