Wie lade ich .bash_profile von der Kommandozeile neu?

996

Wie kann ich .bash_profileüber die Befehlszeile neu laden ?

Ich kann die Shell dazu bringen, Änderungen zu erkennen, .bash_profileindem ich sie beende und mich wieder anmelde, aber ich möchte dies bei Bedarf tun können.

Markdorison
quelle

Antworten:

1882

Einfach eingeben source ~/.bash_profile

Alternativ können Sie eingeben, wenn Sie Tastenanschläge speichern möchten . ~/.bash_profile

SiegeX
quelle
49
Wie wäre es mit alias BASHRELOAD=". ~/.bash_profile". Wenn Sie dies häufig tun, können Sie es einfach als Alias ​​verwenden br.
Bobobobo
1
Gibt es einen Grund, warum ich dies jedes Mal / jede Sitzung tun müsste? Ich kann keine Änderungen an .bash_profile vornehmen lassen, obwohl diese in der Datei enthalten sind, wenn ich sie in einem Editor öffne. Verwirrend.
Erwinheiser
3
@erwinheiser lädt Ihr System die Datei? Einige Systeme verwenden andere Dateien, z. B. ~ / .bashrc.
Graham P Heath
1
Wenn Sie wissen möchten, ob bei der Ladung ein alias reload='source ~/.bash_profile && echo "File .bash_profile reloaded correctly" || echo "Syntax error, could not import the file"';
Fehler
1
Für Leute, die vergessen haben, dass Sie zu OhMyZsh gewechselt sind. Führen Sie open ~ / .zshrc aus und nehmen Sie die Änderungen dort anstelle Ihres .bash_profile
Sankofa
106
. ~/.bash_profile

Stellen Sie einfach sicher, dass Sie dort keine Abhängigkeiten vom aktuellen Status haben.

Carl Norum
quelle
15
Warum funktioniert das? Dh was ist der .Befehl in diesem Fall?
Jonah
9
Der Punktoperator:. ist einfach ein Alias ​​für den sourceBefehl.
Graham P Heath
8
@GrahamPHeath - genau genommen denke ich, dass es umgekehrt ist; das .ist älter als es sourceist.
Carl Norum
4
sourceist eine bash-spezifische Implementierung von.
Thirupathi Thangavel
7
@StasS - .und sourcesind buchstäblich das gleiche in Bash. Aus dem Link: " sourceist ein Synonym für Punkt / Punkt ' .' in Bash, aber nicht in POSIX sh. Verwenden Sie für maximale Kompatibilität den Punkt."
Carl Norum
31

Geben Sie einfach Folgendes ein:

. ~/.bash_profile

Wenn Sie jedoch möchten, dass die Quelle beim Start des Terminals automatisch ausgeführt wird, anstatt sie jedes Mal auszuführen, wenn Sie das Terminal öffnen, können Sie sie . ~/.bash_profileder ~/.bashrcDatei hinzufügen .

Hinweis:

Wenn Sie ein Terminal öffnen, startet das Terminal Bash im interaktiven Modus (ohne Anmeldung), dh, es wird als Quelle verwendet ~/.bashrc.

~/.bash_profilewird nur von bash bezogen, wenn es im interaktiven Anmeldemodus gestartet wird . Dies ist normalerweise nur möglich, wenn Sie sich an der Konsole anmelden ( Ctrl+ Alt+ F1.. F6) oder eine Verbindung herstellen ssh.

Mohammad Anini
quelle
15

Sie können diesen Befehl auch verwenden, um das ~ / .bash_profile für diesen Benutzer neu zu laden. Stellen Sie sicher, dass Sie den Bindestrich verwenden.

su - username
jaypal singh
quelle
6
Dies ruft eine ganze Shell innerhalb einer Shell auf, alles andere als ideal. Die anderen Optionen führen die relevante Datei einfach erneut aus, was bedeutet, dass sie (A) tatsächlich für die gestellte Frage relevant sind und (B) keine Shells stapeln und möglicherweise andere Dinge neu laden, die nicht sein sollten (env vars usw.). Es gibt geeignete Möglichkeiten, die aktuelle Shell vollständig zu ersetzen (ohne Verschachtelung), aber da dies nicht zum Thema gehört, überlasse ich interessierten Lesern die Suche an anderer Stelle.
underscore_d
3
Wenn Sie eine andere Shell öffnen, ist dies kein Neuladen. Sie können auch ein neues Terminal öffnen oder sich neu anmelden
Juan Diego,
15

Ich mag die Tatsache, dass Sie nach dem Bearbeiten der Datei nur noch Folgendes eingeben müssen:

. !$

Dadurch wird die Datei abgerufen, die Sie gerade im Verlauf bearbeitet haben. Siehe Was ist Bang Dollar in Bash .

hyper_st8
quelle
11
  1. Speichern Sie die Datei .bash_profile
  2. Wechseln Sie durch Eingabe zum Home-Verzeichnis des Benutzers cd
  3. Laden Sie das Profil mit neu . .bash_profile
Mithun Khatri
quelle
8
Geh einfach mit nach Hause cd. Keine Notwendigkeit für ~.
RoNn23
8
Keine Notwendigkeit cd- Sie können es einfach aus dem Verzeichnis, in dem Sie sich gerade befinden, neu laden:. ~/.bash_profile
Alex Villa
10

Wenn es Ihnen nichts ausmacht, den Verlauf Ihres aktuellen Shell-Terminals zu verlieren, können Sie dies auch tun

bash -l

Das würde deine Muschel spalten und einen weiteren untergeordneten Prozess der Bash eröffnen. Der -lParameter weist bash an, als Login-Shell ausgeführt zu werden. Dies ist erforderlich, da .bash_profile nicht als Nicht-Login-Shell ausgeführt wird. Weitere Informationen hierzu finden Sie hier

Wenn Sie die aktuelle Shell vollständig ersetzen möchten, können Sie auch Folgendes tun:

exec bash -l

Das Obige wird Ihre aktuelle Shell nicht verzweigen, sondern vollständig ersetzen. Wenn Sie also eingeben exit, wird sie vollständig beendet, anstatt Sie zur vorherigen Shell zu bringen.

Ulukai
quelle
Sie werden Ihre Geschichte nicht verlieren, wenn Sie iterm2
Xitcod13 verwenden.
4

Fügen Sie alias bashs="source ~/.bash_profile"Ihrer Bash-Datei hinzu. So können Sie bashsab dem nächsten Mal anrufen

Shemeer M Ali
quelle
1
Ich alias das reset- leichter zu merken
jcollum
3

Wenn das .bash_profile nicht vorhanden ist, können Sie den folgenden Befehl ausführen:

. ~/.bashrc 

oder

 source ~/.bashrc

anstelle von .bash_profile. Weitere Informationen zu bashrc finden Sie hier

Ezequiel De Simone
quelle
3

Ich wollte eine kurze Antwort veröffentlichen, die während der Verwendung source ~/.bash_profileoder der oben genannten Antworten funktioniert. Eine Sache, die erwähnt werden muss, ist, dass dadurch nur Ihr Bash-Profil in der aktuellen Registerkarte oder Sitzung, die Sie gerade anzeigen, neu geladen wird. Wenn Sie Ihr Bash-Profil auf jeder Registerkarte / Shell neu laden möchten, müssen Sie diesen Befehl in jeder Registerkarte manuell eingeben.

Wenn Sie iTerm verwenden, können Sie mit CMD⌘+ Shift+ Ieinen Befehl in alle aktuellen Registerkarten eingeben . Für das Terminal kann es nützlich sein, auf dieses Problem zu verweisen .

aug
quelle
2

Ich benutze Debian und kann einfach tippen exec bash, um dies zu erreichen. Ich kann nicht sagen, ob es auf allen anderen Distributionen funktioniert.

Kassandra
quelle
2
Dies funktioniert nicht auf dem Mac (zumindest nicht in der Version, die ich verwende - Sierra), da dadurch einfach eine No-Login-Shell ausgeführt wird, auf der das .bash_profile
Ulukai
@ Ulukai anscheinend nur tippen, . .bash_profilewährend in Ihrem Home-Verzeichnis auf dem Mac. Entspricht der Antwort von 7urkm3n.
Cassandra
2
alias reload!=". ~/.bash_profile"

oder wenn Sie Protokolle über Funktionen hinzufügen möchten

function reload! () {
    echo "Reloading bash profile...!"
    source ~/.bash_profile
    echo "Reloaded!!!"
}
7urkm3n
quelle
Nein, es liegt in Ihrer Präferenz. Wenn Sie einige zusätzliche Druckzeilen hinzufügen . ~/. bash_profile source ~/.bash_profile
möchten,
1

Ich leite Sierra und habe eine Weile daran gearbeitet (alle empfohlenen Lösungen ausprobiert). Ich war verwirrt und versuchte schließlich, meinen Computer neu zu starten! Es funktionierte

Mein Fazit ist, dass manchmal ein Hard-Reset notwendig ist

Björks größter Fan
quelle
1
Mike ja ein Hard Reset wird funktionieren, da dann alles frisch geladen wird. Solange die von Ihnen vorgenommenen Änderungen funktionsfähig sind, wird sie beim nächsten Start wirksam. Es wäre jedoch einfacher für Sie, ein wenig herumzuwühlen, um den Befehl / die Methode zu finden, mit der Sie die Bash einfach aktualisieren können, ohne dies die ganze Zeit tun zu müssen. Es wird eine Möglichkeit geben, dies ohne den Neustart zu erreichen, was natürlich viel zu viel Zeit in Anspruch nimmt, nur um zu sehen, ob die letzte Änderung funktioniert! Vielleicht werfen Sie
Cassandra
1
Ja, ich habe sowohl den abgekürzten als auch den vollständigen Befehl versucht, um das Bash-Profil / den Pfad neu zu laden. es hat nicht funktioniert, nur das Abmelden und das erneute Anmelden hat funktioniert. seltsam
Björks Nummer eins Fan