Wenn ich Änderungen an vornehme .bashrc
, wie kann ich es neu laden, ohne mich ab- und wieder anzumelden?
Wenn ich Änderungen an vornehme .bashrc
, wie kann ich es neu laden, ohne mich ab- und wieder anzumelden?
Antworten:
Sie müssen nur den Befehl eingeben:
source ~/.bashrc
oder Sie können die kürzere Version des Befehls verwenden:
. ~/.bashrc
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:
exec bash
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 von bash
(durch die aktualisierten Konfigurationsdateien) ersetzt.
source .bashrc
Befehlsunterschied erklären und exec 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. Und exec
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 , in dash
statt bash
, so dass es ein Fehler , da shopt
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ährend exec 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
. Der exec
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
und exec bash
:
Beide Lösungen werden effektiv neu geladen ~/.bashrc
, aber es gibt Unterschiede:
. ~/.bashrc
oder source ~/.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 andere bash
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.
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.
. .bashrc
~/
, aber da die Top-Antwort zeigt beide source ~/.bashrc
und . ~/.bashrc
ich frage mich , ob diese Antwort sollte nur als redundante gelöscht werden.
Abhängig von Ihrer Umgebung tippen Sie einfach
bash
kann auch funktionieren.
. ~/.bashrc
source ~/.bashrc
exec bash
exec
Befehl ersetzt die Shell durch ein bestimmtes Programm ... - WhoSayIn
exec bash
erbt immer noch die Umgebung der aktuellen Shell. exec env -i bash
wäre näher (oder exec 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:
if [ -n "$BASH_VERSION" ]; then
# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi
Öffnen Sie Ihre Sitzung erneut und sie sollte alle Pfade / Skripte laden, die Sie in .bashrc haben.
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)
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;
Für mich funktioniert, wenn ich den PFAD ändere: exec "$BASH" --login
~/.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
.bashrc
befindet. Ein korrekterer Weg, dies zu tun, wie in der akzeptierten Antwort angegeben, ist source ~/.bashrc
.
Ich benutze den folgenden Befehl auf msysgit
. ~/.bashrc
kürzere Version von
source ~/.bashrc
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:
history -a && exec bash -l
Dies wird auch funktionieren ..
cd ~
source .bashrc
~
, dass das Arbeitsverzeichnis in das Benutzerverzeichnis geändert werden soll?
Ich habe festgestellt, dass der reine exec bash
Befehl die Umgebungsvariablen beibehält, sodass Sie exec -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 Sie exec bash
die A == 1
.
Wenn Sie exec -cl bash
, A
ist leer.
Ich denke, das ist der beste Weg, um Ihren Job zu machen.
Ich persönlich habe
alias ..='source ~/.bashrc'
in meinem bashrc, so dass ich es einfach mit ".." neu laden kann.
..
als Alias für cd ..
, daher wird es sehr verwirrend sein.
alias rehash='source ~/.bashrc'
ist meine Wahl.
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?