In einem modernen System ist es nicht besonders üblich, auf Fälle zu stoßen, in denen es wichtig ist, aber es passiert. (Insbesondere, wenn Sie Shell-Operationen vim
wie :r !command
oder in Inline- !<motion>command
Form verwenden.)
Was würdest du unter ~ / .bashrc stellen? nur Aliase?
Sie ~/.bashrc
fügen Dinge hinzu , die Subshells nicht automatisch erben würden. Dies bedeutet meistens Aliase und Funktionen, obwohl Sie manchmal variable Einstellungen haben, die außerhalb der Shell nicht sichtbar sein sollen (dies ist sehr selten). Man könnte argumentieren, dass diese irgendwie exportiert werden sollten, aber verschiedene experimentelle Versuche führten zu Kompatibilitätsproblemen beim Versuch, sie in der Umgebung zu verstecken, und wurden größtenteils aufgegeben.
Wenn ich eine Umgebungsvariable festlegen und sie dem PATH hinzufügen möchte (zum Beispiel JAVA_HOME), wo wäre es der beste Ort, um den Exporteintrag abzulegen? in ~ / .bash_profile oder ~ / .bashrc?
Sie legen die Umgebungseinstellungen ~/.bash_profile
so fest, dass sie die richtigen Anfangseinstellungen erhalten. Manchmal möchten Sie diese überschreiben (häufig wird dies von komplexen Umgebungen wie Matlab oder Cadence durchgeführt). Wenn Sie ~/.bashrc
die Umgebungseinstellungen übernehmen, gehen die Anpassungen der Umgebungen verloren, wenn Shells in diesen Umgebungen ausgeführt werden. Infolgedessen funktionieren die Dinge möglicherweise nicht richtig. Dies gilt auch, wenn Sie ein Paket wie Module , virtualenv , rvm usw. verwenden, um mehrere Entwicklungsumgebungen zu verwalten. Wenn Sie Ihre Einstellungen vornehmen ~/.bashrc
, können Sie die gewünschte Umgebung nicht in Ihrem Editor ausführen, sondern werden auf die Systemstandardeinstellungen zurückgesetzt.
In einer Shell ohne Login glaube ich, dass das ~ / .bash_profile nicht "abgeholt" wird.
Das ist richtig; Normalerweise soll die anfängliche Shell eine Anmeldeshell sein und alle unter dieser Shell gestarteten Shells dürfen keine Anmeldeshells sein. Wenn die anfängliche Shell keine Anmeldeshell ist, haben Sie keine Standardeinstellungen PATH
oder verschiedene andere Einstellungen (einschließlich Ihres JAVA_HOME
Beispiels).
Die meisten Desktop-Umgebungen, die von Display-Managern gestartet werden (d. H. Die meisten grafischen Anmeldungen), richten keine Anmeldeumgebung für den gesamten Desktop ein, sodass Sie die anfängliche Shell in Terminals als Anmelde-Shell ausführen müssen. Dies führt zu einer Reihe von Problemen (insbesondere, dass die PATH
für Programme verfügbaren Programme, die von z. B. Panels ausgeführt werden, nicht ordnungsgemäß eingerichtet sind, da das Panel kein Terminal ist und nicht ausgeführt wurde ~/.bash_profile
), stellt jedoch einen vernünftigen Kompromiss dar, da dies nicht immer möglich ist Sicheres Ausführen ~/.bash_profile
in der nicht interaktiven Umgebung zu Beginn einer Sitzung, die von einem Display-Manager gestartet wurde, je nach Inhalt. Es wird manchmal empfohlen, Umgebungseinstellungen in zu platzieren~/.bashrc
anstatt stattdessen eine Login-Shell zu konfigurieren; Wie oben erläutert, funktioniert dies so lange, wie Sie diese Umgebung nicht überschreiben müssen, und es kommt zu ungewöhnlichen Brüchen, wenn Sie dies tun müssen.
Ich half vor kurzem ein Problem wie dieses auf OS X zu diagnostizieren , wo ein Benutzer, der in platziert Einstellungen hatte ~/.bashrc
dann später begann mit rvm
und perlbrew Säge merkwürdiges Verhalten, weil die Umgebungen durch die beiden waren „undone“ von eingerichtet ~/.bashrc
innen Editoren und sudo
(die auf OS X Im Gegensatz zu Linux wird der Benutzer $HOME
so weitergegeben, dass er ~/.bashrc
von der Root-Shell ausgeführt wurde. Vor dem Versuch, diese Umgebungen zu verwenden, gab es kein Problem. Als sie anfingen, sie zu benutzen, waren sie verwirrt über den unerwarteten Verlust ihrer Einstellungen.
modules
undrvm
sind Entwicklerwerkzeuge, ebenso wie Matlab und Cadence für etwas andere Definitionen von "Entwickler". Einfache Entwicklung erfordert auch sich nicht, aber wenn Sie zu Test gegen mehrere Versionen von Ruby benötigen, Perl oder Python dann wollen Sie wirklich so etwas wiervm
,perlbrew
undvirtualenv
(jeweils) um zu helfen , halten sie alle gerade.Um ehrlich zu sein, gibt es heutzutage kaum einen Unterschied, trotz dessen, was der Guru zu sagen hatte.
Das Problem dabei ist, dass wir uns heutzutage eher grafisch anmelden als über eine Anmeldeshell. In der Vergangenheit möchten wir Unix-Benutzer sofort nach der Anmeldung einen kurzen Bericht darüber sehen, was auf einem Server vor sich geht. Dann starten wir X über die Befehlszeile. Die Erstellung dieses Berichts dauert häufig einige Zeit (z. B. 10 bis 20 Sekunden). und dann wollen wir nicht dasselbe sehen, wenn wir zB xterm starten. also der unterschied.
Heutzutage denke ich nicht, dass die Unterscheidung jetzt wichtig ist. Ich denke, heutzutage, wenn Sie bashrc in bash_profile beziehen, kann Ihnen niemand die Schuld geben.
Beachten Sie, dass dies nicht für MacOS X gilt (jede gestartete terminal.app ist eine Login-Shell).
quelle
~/.bash_profile
keine Quelle vorhanden~/.bashrc
ist, ist ziemlich schwer zu bearbeiten und grenzt an einen Defekt. Grafische Terminal-Apps bedeuten, dass es einfacher ist, einfach ~ / .bashrc zu beziehen und die gesamte Konfiguration dort abzulegen.Nun, bei "Grafischen Logins" kommt es darauf an, welche * DM Sie verwenden ...
Mit GDM (Gnome 3.18) habe ich folgendes:
/ etc / gdm / Xsession
Also wird ~ / .profile in login mit / bin / sh und nicht mit / bin / bash bezogen
Es gibt zwei Fälle
Das / bin / sh-Profil ist also ~ / .profile und nicht ~ / .bash_profile, ~ / .zprofile
Diese Datei sollte für "Shell Agnostic" -Einstellungen wie Pfad- und Umgebungsvariablen verwendet werden.
KEIN ausführbares Programm für die Nur-Login-Benutzerinteraktion sollte aber hier sein (Mailcheck, Fortune, etc ...)
Die ~ / .* rc sind nur für "interaktive" Sitzungen gedacht (zum Beispiel Aliase ...)
Bei interaktiven Login- Shells gibt es einen Unterschied zwischen bash und zsh
Bash-Quellen nur .bash_profile, während Zsh-Quellen in der Reihenfolge:
Die richtige Vorgehensweise für ~ / .bash_profile wurde hier beantwortet:
Unterschied zwischen .bashrc und .bash_profile
Zum Aktivieren von Test (und Profilerstellung) können Sie dies verwenden
~ / .bash_profile:
~ / .zprofile:
dann zum testen:
Also sollte RVM / virtualenv in ~ / .profile gehen, IMHO
Aber das funktioniert nicht , manchmal ...
Beispielsweise funktioniert virualenvwrapper nur, wenn die Shell, auf der Xsession ausgeführt wird, eine "ursprüngliche" Bash ist (Export von BASH_VERSION).
Wenn Sie sich auf einem Dash- System befinden, funktionieren die Umgebungsvariable und die Pfadeinstellung , die Definition der virualenvwrapper- Funktion funktioniert jedoch nicht, da das Skript nicht POSIX-kompatibel ist.
Das Skript gibt keinen Fehler aus, endet jedoch ohne "Workon" -Definition.
Sie können also die Umgebung in ~ / .profile festlegen , um die korrekte Python-Ausführung vom Client aus zu ermöglichen, der direkt von X aus gestartet wurde:
https://gist.github.com/datagrok/2199506
https://www.bountysource.com/issues/9061991-setting-up-your-computer-virtualenvwrapper-linux-all
Für virualenvwrapper gibt es jedoch zwei Alternativen:
Dies bedeutet, dass X-Clients (z. B. Emacs) von der Terminal-Shell aus gestartet werden sollten und nicht von der grafischen!
"Ich kann keine Befriedigung bekommen ..."
quelle