it-swarm.com.de

Wie lade ich .bashrc neu, ohne mich aus- und wieder einzuloggen?

Wie kann ich Änderungen an .bashrc vornehmen, ohne mich aus- und wieder einzuloggen?

1447
Jed Daniels

Sie müssen nur den Befehl eingeben:

source ~/.bashrc

oder Sie können die kürzere Version des Befehls verwenden:

. ~/.bashrc
2332
George Hawkins

oder du könntest verwenden;

exec bash

macht das gleiche. (und leichter zu merken, zumindest für mich)

Der Befehl exec ersetzt die Shell durch das angegebene Programm. In unserem Beispiel wird die Shell durch bash (mit den aktualisierten Konfigurationsdateien) ersetzt )

242
WhoSayIn

Um die beiden beliebtesten Antworten zu ergänzen und zu kontrastieren , . ~/.bashrc und exec bash :

Beide Lösungeneffektivreload _~/.bashrc_, aber es gibt Unterschiede:

  • _. ~/.bashrc_ oder _source ~/.bashrc_ wird bewahrenIhre aktuelle Shell :

    • Mit Ausnahme der Änderungen, die beim erneuten Laden von _~/.bashrc_ in die aktuelle Shell (sourcing) vorgenommen werden, wird dasaktuelle Shell und ihr Statussindbeibehalten, einschließlich Umgebungsvariablen, Shell-Variablen, Shell-Optionen, Shell-Funktionen und Befehlsverlauf.
  • _exec bash_ oder robuster _exec "$BASH"_[1], wird Ihre aktuelle Shell durch eine neue Instanz ersetzen, und daher onlybehalte dieUmgebungsvariablen deiner aktuellen Shell (einschließlich diejenigen, die Sie ad-hoc definiert haben).

    • Mit anderen Worten: Alle Ad-hoc-Änderungen an der aktuellen Shell in Bezug auf Shell-Variablen, Shell-Funktionen, Shell-Optionen und Befehlsverlauf gehen verloren.

Abhängig von Ihren Anforderungen kann der eine oder andere Ansatz bevorzugt werden.


[1] _exec bash_ könnte theoretisch eineanderebash ausführbare Datei ausführen als die, die die aktuelle Shell gestartet hat, wenn sie zufällig in a existiert Verzeichnis, das weiter oben in _$PATH_ aufgeführt ist. Da die spezielle Variable _$BASH_ immer den vollständigen Pfad der ausführbaren Datei enthält, die die aktuelle Shell gestartet hat, wird _exec "$BASH"_ garantiert diesameausführbare Datei verwenden.
Eine Anmerkung zu _"..."_ um _$BASH_: Durch doppelte Anführungszeichen wird sichergestellt, dass der Variablenwert unverändert verwendet wird, ohne dass dies von Bash interpretiert wird. Wenn der Wert keine eingebetteten Leerzeichen oder andere Shell-Metazeichen enthält (was in diesem Fall wahrscheinlich nicht der Fall ist), benötigen Sie keine doppelten Anführungszeichen. Die Verwendung dieser Anführungszeichen ist jedoch eine gute Angewohnheit.

109
mklement0

Jemand hat meine Antwort bearbeitet, um falsches Englisch hinzuzufügen, aber hier war das Original, das der akzeptierten Antwort unterlegen ist.

. .bashrc
45
Randy Proctor

Je nach Ihrer Umgebung müssen Sie nur tippen

bash

kann auch funktionieren.

18
James

Damit müssen Sie nicht sogar "source ~/.bashrc" eingeben:

Fügen Sie Ihre bashrc-Datei hinzu:

alias rc="vim ~/.bashrc && source ~/.bashrc"

Jedes Mal, wenn Sie Ihren bashrc bearbeiten möchten, führen Sie einfach den Alias ​​"rc" aus.

16
Roy Lin
. ~/.bashrc

. ist ein POSIX-mandated builtin


Alternativen

source ~/.bashrc

source ist ein Synonym für Punkt/Punkt . in Bash, aber nicht in POSIX sh, verwenden Sie für maximale Kompatibilität den Punkt.

exec bash
  • exec Befehl ersetzt die Shell durch ein bestimmtes Programm ... - WhoSayIn
11
Geoffrey Hale

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 mit Ubuntu durchgeführt und dort ist standardmäßig .profile, nicht .bashrc oder .bash_profile geladen. Um Skripte in .bashrc auszuführen, musste ich jedes Mal, wenn eine Sitzung geöffnet wurde, source ~/.bashrc ausführen, was beim Ausführen von Remote-Bereitstellungen nicht hilfreich ist.

Wenn Sie möchten, dass Ihre .bashrc-Datei beim Öffnen einer Sitzung automatisch geladen wird, fügen Sie Folgendes zu .profile hinzu:

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 es sollten alle Pfade/Skripte geladen werden, die Sie in .bashrc haben.

5
karolus

Für mich funktioniert, wenn ich den PATH ändere: exec "$BASH" --login

3
Cecília Regina

Ich habe meinen Cloud-basierten Server mit easyengine eingerichtet.
Ich habe meine Bash-Datei bei /etc/bash.bashrc gefunden.

Also hat source /etc/bash.bashrc den Trick für mich getan!

update

Wenn Sie einen Bare-Server einrichten (Ubuntu 16.04), können Sie die obigen Informationen verwenden, wenn Sie noch keinen Benutzernamen eingerichtet haben und sich über root anmelden.

Erstellen Sie am besten einen Benutzer (mit Sudo-Berechtigungen) und melden Sie sich stattdessen als dieser Benutzername an.
Dadurch wird ein Verzeichnis für Ihre Einstellungen erstellt, einschließlich der .profile- und .bashrc-Dateien.
https://linuxize.com/post/how-to-create-a-Sudo-user-on-ubuntu/

Nun werden Sie die ~/.bashrc -Datei bearbeiten und (und "als Quelle").

Auf meinem Server befand sich dies unter /home/your_username/.bashrc
(wobei your_username der neue Benutzername ist, den Sie oben erstellt haben und mit dem Sie sich jetzt anmelden)

3
SherylHohman

art:

source ~/.bashrc

oder in kürzerer Form:

. ~/.bashrc

2
jwismar

exec bash ist eine großartige Möglichkeit, eine neue Shell erneut auszuführen und zu starten, um die aktuelle Shell zu ersetzen. Um die Antwort zu ergänzen, gibt $ Shell die aktuelle Shell zurück, die bash ist. Mit dem folgenden Befehl wird die aktuelle Shell neu geladen und nicht nur zum Bash.

exec $Shell -l;

2
Jimmy M.G. Lim

Dies wird auch funktionieren ..

cd ~
source .bashrc
1
kirti

ich benutze den folgenden Befehl auf msysgit

. ~/.bashrc

kürzere Version von

source ~/.bashrc
1
Sojan V Jose

Ich habe festgestellt, dass mit dem Befehl pure exec bash die Umgebungsvariablen beibehalten werden. Daher müssen Sie exec -c bash verwenden, um bash in einer leeren Umgebung auszuführen.

Beispielsweise melden Sie eine Bash an und export A=1, wenn Sie exec bash, den A == 1.

Wenn Sie exec -cl bash, A ist leer.

Ich denke, das ist der beste Weg, um deine Arbeit zu erledigen.

1
CatDog

Angenommen, Sie haben eine interaktive Shell und möchten Ihren aktuellen Befehlsverlauf beibehalten und außerdem/etc/profile laden (das Umgebungsdaten einschließlich/etc/bashrc lädt und unter Mac OS X Pfade lädt, die in /etc/paths.d/ über definiert sind) path_helper), hängen Sie Ihren Befehlsverlauf an und führen Sie eine Bash-Ausführung mit der Login-Option ('-l') aus:

history -a && exec bash -l
1
beattidp