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 execBefehl 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 .bashrcBefehlsunterschied erklären und exec bash?
sourceist 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 execBefehl ersetzt die Shell durch ein bestimmtes Programm, in Ihrem Beispiel ersetzt er Ihre Shell durch bash (mit den aktualisierten Konfigurationsdateien)
. ~/.bashrcwird ausgeführt , in dashstatt bash, so dass es ein Fehler , da shoptfehlt. sourcewird 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 ~/.bashrcDie gesamte Shell-Umgebung bleibt erhalten (obwohl dies wahrscheinlich durch die Beschaffung von geändert wurde ~/.bashrc), während exec bashnur 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 execBefehl 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 , . ~/.bashrcund exec bash:
Beide Lösungen werden effektiv neu geladen ~/.bashrc, aber es gibt Unterschiede:
. ~/.bashrcoder source ~/.bashrcwird erhalten Ihre aktuelle Shell :
~/.bashrcin 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 bashOder, 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 bashkö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 $BASHimmer 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 $BASHwird 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 ~/.bashrcund . ~/.bashrcich 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
execBefehl ersetzt die Shell durch ein bestimmtes Programm ... - WhoSayIn
exec basherbt immer noch die Umgebung der aktuellen Shell. exec env -i bashwäre näher (oder exec env -i bash -lwenn 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 ~/.bashrcjedes 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.bashrchat 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 ~/.bashrcDatei.
Auf meinem Server befand sich dieser unter /home/your_username/.bashrc
(wo your_usernameist 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 --loginwird nicht (direkt) reload; Auf Benutzerebene wird es stattdessen neu geladen ~/.bash_profile(oder ~/.bash_loginoder ~/.profile).
Art:
source ~/.bashrc
oder in kürzerer Form:
. ~/.bashrc
.bashrcbefindet. 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 bashBefehl die Umgebungsvariablen beibehält, sodass Sie exec -c bashbash in einer leeren Umgebung ausführen müssen.
Zum Beispiel melden Sie sich bei einer Bash an, und export A=1wenn Sie exec bashdie A == 1.
Wenn Sie exec -cl bash, Aist 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 nurbarder Pfad, aber wenn Sie das tun, was Sie vorschlagen, befinden sich beidefooundbarder Pfad. Kennen Sie einen Weg, dies zu umgehen?