Wenn ich Änderungen an vornehme .bashrc
, wie kann ich es neu laden, ohne mich ab- und wieder anzumelden?
1644
Sie müssen nur den Befehl eingeben:
source ~/.bashrc
oder Sie können die kürzere Version des Befehls verwenden:
. ~/.bashrc
export PATH=$PATH:foo
, Sie hatten die folgende Zeile in .bashrc : , und ändern sie dann inexport PATH=$PATH:bar
. Wenn Sie sich anmelden und wieder abmelden, befindet sich nurbar
der Pfad, aber wenn Sie das tun, was Sie vorschlagen, befinden sich beidefoo
undbar
der Pfad. Kennen Sie einen Weg, dies zu umgehen?alias editbashrc='vim ~/.bashrc; source ~/.bashrc'
. Dies macht die Bearbeitung viel reibungsloser, da Sie nach dem Bearbeiten nicht über das erneute Laden nachdenken müssen, wenn Sie den benutzerdefinierten Alias verwenden.Oder Sie könnten verwenden:
Dies macht das Gleiche und ist leichter zu merken (zumindest für mich).
Der
exec
Befehl ersetzt den Shell-Prozess vollständig, indem die angegebene Befehlszeile ausgeführt wird. In unserem Beispiel wird die aktuelle Shell durch eine neue Instanz vonbash
(durch die aktualisierten Konfigurationsdateien) ersetzt.quelle
source .bashrc
Befehlsunterschied erklären undexec bash
?source
ist ein integrierter Shell-Befehl, der den Inhalt der als Argument übergebenen Datei in der aktuellen Shell ausführt . In Ihrem Beispiel wird die .bashrc-Datei in der aktuellen Shell ausgeführt. Undexec
Befehl ersetzt die Shell durch ein bestimmtes Programm, in Ihrem Beispiel ersetzt er Ihre Shell durch bash (mit den aktualisierten Konfigurationsdateien). ~/.bashrc
wird ausgeführt , indash
stattbash
, so dass es ein Fehler , dashopt
fehlt.source
wird nicht aus der Shell gefunden, daher ist diese Lösung ebenfalls nicht verfügbar. Ich habe es versucht und das Docker-Image wurde reibungslos erstellt!source ~/.bashrc
Die gesamte Shell-Umgebung bleibt erhalten (obwohl dies wahrscheinlich durch die Beschaffung von geändert wurde~/.bashrc
), währendexec bash
nur die Umgebungsvariablen Ihrer aktuellen Shell erhalten bleiben (alle Ad-hoc-Änderungen an der aktuellen Shell in Bezug auf Shell-Variablen, Funktionen und Optionen gehen verloren). Abhängig von Ihren Anforderungen kann der eine oder andere Ansatz bevorzugt werden.exec bash
. Derexec
Befehl ersetzt die Shell durch das Programm, in unserem Fall bash. Es gibt also immer eine Instanz von Bash im Terminal.Um die beiden beliebtesten Antworten zu ergänzen und gegenüberzustellen ,
. ~/.bashrc
undexec bash
:Beide Lösungen werden effektiv neu geladen
~/.bashrc
, aber es gibt Unterschiede:. ~/.bashrc
odersource ~/.bashrc
wird erhalten Ihre aktuelle Shell :~/.bashrc
in die aktuelle Shell ( Sourcing ) vorgenommen werden, bleiben die aktuelle Shell und ihr Status erhalten , einschließlich Umgebungsvariablen, Shell-Variablen, Shell-Optionen, Shell-Funktionen und Befehlsverlauf.exec bash
Oder, robuste,exec "$BASH"
[1] , wird ersetzen Ihre aktuelle Shell mit einer neuen Instanz und damit nur Ihre aktuellen Shell bewahren Umgebungsvariablen (einschließlich denjenigen , die Sie Ad-hoc definiert haben).Abhängig von Ihren Anforderungen kann der eine oder andere Ansatz bevorzugt werden.
[1]
exec bash
könnte theoretisch eine anderebash
ausführbare Datei ausführen als die, mit der die aktuelle Shell gestartet wurde, wenn sie zufällig in einem zuvor im Verzeichnis aufgeführten Verzeichnis vorhanden ist$PATH
. Da die spezielle Variable$BASH
immer den vollständigen Pfad der ausführbaren Datei enthält, mit der die aktuelle Shell gestartet wurde,exec "$BASH"
wird garantiert dieselbe ausführbare Datei verwendet.Ein Hinweis re der
"..."
Umgebung$BASH
: double-quoting sichergestellt , dass der Variablenwert verwendet wird , wie sie ist, ohne Interpretation durch Schlag; Wenn der Wert keine eingebetteten Leerzeichen oder andere Shell-Metazeichen enthält (was in diesem Fall nicht wahrscheinlich ist), benötigen Sie keine doppelten Anführungszeichen, aber die Verwendung dieser Anführungszeichen ist eine gute Angewohnheit.quelle
exec $BASH
wird Quelle~/.bashrc
, so dass Sie seine Änderungen an der Shell-Umgebung in der neuen Sitzung sehen werden.Jemand hat meine Antwort bearbeitet, um falsches Englisch hinzuzufügen, aber hier war das Original, das der akzeptierten Antwort unterlegen ist.
quelle
~/
, aber da die Top-Antwort zeigt beidesource ~/.bashrc
und. ~/.bashrc
ich frage mich , ob diese Antwort sollte nur als redundante gelöscht werden.Abhängig von Ihrer Umgebung tippen Sie einfach
kann auch funktionieren.
quelle
Damit müssen Sie nicht einmal "source ~ / .bashrc" eingeben:
Fügen Sie Ihre bashrc-Datei hinzu:
Führen Sie jedes Mal, wenn Sie Ihren bashrc bearbeiten möchten, einfach den Alias " rc " aus.
quelle
Alternativen
quelle
exec bash
erbt immer noch die Umgebung der aktuellen Shell.exec env -i bash
wäre näher (oderexec env -i bash -l
wenn Sie sich derzeit in einer Login-Shell befinden).Abhängig von Ihrer Umgebung möchten Sie möglicherweise Skripts hinzufügen, damit .bashrc beim Öffnen einer SSH-Sitzung automatisch geladen wird. Ich habe kürzlich eine Migration auf einen Server durchgeführt, auf dem Ubuntu ausgeführt wird, und dort wird standardmäßig .profile, nicht .bashrc oder .bash_profile geladen. Um Skripte in .bashrc auszuführen, musste ich
source ~/.bashrc
jedes Mal ausführen, wenn eine Sitzung geöffnet wurde, was beim Ausführen von Remotebereitstellungen nicht hilfreich ist.Fügen Sie Folgendes zu .profile hinzu, damit Ihre .bashrc-Datei beim Öffnen einer Sitzung automatisch geladen wird:
Öffnen Sie Ihre Sitzung erneut und sie sollte alle Pfade / Skripte laden, die Sie in .bashrc haben.
quelle
Ich habe easyengine verwendet, um meinen vultr Cloud-basierten Server einzurichten.
Ich habe meine Bash-Datei bei gefunden
/etc/bash.bashrc
.So
source /etc/bash.bashrc
hat den Trick für mich!aktualisieren
Beim Einrichten eines Bare-Servers (Ubuntu 16.04) können Sie die obigen Informationen verwenden, wenn Sie noch keinen Benutzernamen eingerichtet haben und sich über root anmelden.
Es ist am besten, einen Benutzer (mit Sudo-Berechtigungen) zu erstellen und sich stattdessen als dieser Benutzername anzumelden.
Dadurch wird ein Verzeichnis für Ihre Einstellungen erstellt, einschließlich .profile- und .bashrc-Dateien.
https://linuxize.com/post/how-to-create-a-sudo-user-on-ubuntu/
Jetzt bearbeiten und (und "quellen") Sie die
~/.bashrc
Datei.Auf meinem Server befand sich dieser unter
/home/your_username/.bashrc
(wo
your_username
ist eigentlich der neue Benutzername, den Sie oben erstellt haben und mit dem Sie sich jetzt anmelden)quelle
exec bash ist eine großartige Möglichkeit, eine neue Shell erneut auszuführen und zu starten, um die aktuelle zu ersetzen. Nur um die Antwort zu ergänzen, gibt $ SHELL die aktuelle Shell zurück, die bash ist. Wenn Sie Folgendes verwenden, wird die aktuelle Shell neu geladen und nicht nur zum Bash.
exec $SHELL -l;
quelle
Für mich funktioniert, wenn ich den PFAD ändere:
exec "$BASH" --login
quelle
~/.bashrc
, das--login
wird nicht (direkt) reload; Auf Benutzerebene wird es stattdessen neu geladen~/.bash_profile
(oder~/.bash_login
oder~/.profile
).Art:
source ~/.bashrc
oder in kürzerer Form:
. ~/.bashrc
quelle
.bashrc
befindet. Ein korrekterer Weg, dies zu tun, wie in der akzeptierten Antwort angegeben, istsource ~/.bashrc
.Ich benutze den folgenden Befehl auf msysgit
kürzere Version von
quelle
Angenommen, Sie möchten eine interaktive Shell verwenden und Ihren aktuellen Befehlsverlauf beibehalten sowie / etc / profile laden (das Umgebungsdaten einschließlich / etc / bashrc lädt und unter Mac OS X Pfade lädt, die in /etc/paths.d/ via definiert sind path_helper), hängen Sie Ihren Befehlsverlauf an und führen Sie eine Bash-Ausführung mit der Anmeldeoption ('-l') durch:
quelle
Dies wird auch funktionieren ..
quelle
~
, dass das Arbeitsverzeichnis in das Benutzerverzeichnis geändert werden soll?Ich habe festgestellt, dass der reine
exec bash
Befehl die Umgebungsvariablen beibehält, sodass Sieexec -c bash
bash in einer leeren Umgebung ausführen müssen.Zum Beispiel melden Sie sich bei einer Bash an, und
export A=1
wenn Sieexec bash
dieA == 1
.Wenn Sie
exec -cl bash
,A
ist leer.Ich denke, das ist der beste Weg, um Ihren Job zu machen.
quelle
Ich persönlich habe
alias ..='source ~/.bashrc'
in meinem bashrc, so dass ich es einfach mit ".." neu laden kann.
quelle
..
als Alias fürcd ..
, daher wird es sehr verwirrend sein.alias rehash='source ~/.bashrc'
ist meine Wahl.