Wie stelle ich meine bashrc-Änderungen dauerhaft ein?

5644

Jedes Mal, wenn ich mich bei SSH anmelde, muss ich die bashrc-Datei manuell erstellen, um meine Pfadvariablen so einzustellen, wie ich es möchte. Wie muss ich die Bash automatisch machen? Sollte es nicht automatisch sein?

7
Sollte das "~ / .bashrc" sein? Wahrscheinlich für PATH würde ich es in `~ / .bash_profile` setzen. In jedem Fall ist der Punkt notwendig. mpez0 vor 14 Jahren 4

4 Antworten auf die Frage

5
petersohn

There is the ~/.profile (or ~/.bash-profile) file, that runs at every login. You should set environment variables there (with the export command). And there is the ~/.bashrc file, which is run on opening each sell. Commands that are not inherited to all subshells, like alias, can be set here (though for good practise, aliases should be set in ~/.aliases, which is automatically sourced by ~/.bashrc).

If it doesn't work for you, you either use a wrong filename (missing "." from beginning?), or you don't use bash as your shell. In the latter case, try passwd -s /bin/bash (or chsh -s /bin/bash, depending on OS), or call the SSH the following way: 

ssh username@host bash` 
Es sollte einen Punkt geben: `~ / .bashrc` (Sie erwähnen sogar, dass dem OP möglicherweise ein Punkt fehlt!). `~ / .Aliases` oder` ~ / .bash_aliases` wird * nicht * automatisch bezogen. Es muss Anweisungen in `~ / .bashrc` geben, um * explizit * das zu tun. Dennis Williamson vor 14 Jahren 3
Ich denke, Sie meinten "~ / .bash_profile" mit einer Unterstreichung, nicht mit einem Bindestrich. Cristian Ciupitu vor 11 Jahren 0
3
Marnix A. van Ammers

Sie sollten auch über $ BASH_ENV Bescheid wissen.

Welche Dateien von bash beim Start gelesen werden, hängt davon ab, ob die Sitzung interaktiv ist oder nicht. Gelegentlich kann ein Problem auftreten, bei dem nicht klar ist, ob die Sitzung interaktiv ist. Neben ~ / .bashrc möchten Sie vielleicht auch die Variable BASH_ENV so exportieren, dass sie auf eine Datei verweist, die den PATH und andere Einstellungen enthält, die Sie benötigen. BASH_ENV kann so eingestellt werden, dass es auf Ihre .bashrc-Datei verweist (manchmal ist es .bash_rc), solange sich dort keine interaktiven Befehle befinden (verwenden Sie dazu eine separate Datei, beispielsweise ~ / .bash_env). Von den Bash-Man-Seiten:


Wenn eine interaktive Shell gestartet wird, die keine Login-Shell ist, liest und führt bash Befehle von ~ / .bashrc aus, falls diese Datei vorhanden ist. Dies kann mit der Option --norc verhindert werden. Die Option --rcfile file bewirkt, dass bash Befehle anstelle von ~ / .bashrc aus der Datei liest und ausführt.

Wenn Bash nicht interaktiv gestartet wird, sucht es beispielsweise nach einem Shell-Skript in der Umgebung nach der Variablen BASH_ENV, erweitert dessen Wert, wenn es dort erscheint, und verwendet den erweiterten Wert als Namen einer zu lesenden und auszuführenden Datei . Bash verhält sich so, als ob der folgende Befehl ausgeführt würde:

 if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi 

Der Wert der PATH-Variablen wird jedoch nicht zur Suche nach dem Dateinamen verwendet.


1
Rich Homolka

Ich weiß, das ist alt, aber ich denke, bei einer neuen Login-Shell sucht Bash nach einer einzelnen Datei, die ausgeführt werden soll. Es sucht nach .bash_profile, dann .profile, dann .bashrc. Wenn .bash_profile oder .profile gefunden wird, wird nicht mehr nach .bashrc gesucht.

Lösung, geben Sie Ihr .profile ein:

[ -f $HOME/.bashrc ] && . $HOME/.bashrc 
1
hoosierEE

Es gibt bereits mehrere (wahrscheinlich korrekte) Antworten, aber ich hatte genau dasselbe Problem und das hat bei mir funktioniert:

Fügen Sie ~/.bash_profilefolgende Zeilen hinzu:

if [ -f ~/.bashrc ]; then source ~/.bashrc fi 

Siehe hier und hier für weitere Informationen.

(beachten Sie, in meinem $ HOME - Verzeichnis Ich hatte bereits die folgenden Dateien: .bash_aliases .bash_history .bash_logout .bash_profile .bashrc)

`bash` sucht nicht nach` ~ / .bashrc`, wenn es ein `~ / .bash_profile` gibt. Blacklight Shining vor 11 Jahren 0