Hier ist die Motivation für die Frage:
Ich verwende Ubuntu 12.04 LTS 2 mit dem Unity-Desktop. In meiner .bashrc-Datei hänge ich mehrere Verzeichnisse an meine PATH-Variable an und definiere einige Umgebungsvariablen, z. B. JAVA_HOME. Wenn ich Anwendungen von einem Terminal aus starte (mit bash, meiner Standard-Shell), funktioniert dies hervorragend, aber für einige der Verknüpfungen, die den Unity-Launcher verwenden, werden Apps ausgeführt, die anscheinend für die Verwendung von #! / Bin / sh definiert sind ist auf / bin / dash ausgerichtet und nimmt den Inhalt von ~ / .bashrc oder ~ / .profile nicht auf.
Ich nehme an, ich könnte all diese Verknüpfungen ändern, um / bin / bash anstelle von / bin / sh zu verwenden, um zu erzwingen, dass die .bashrc-Änderungen übernommen werden, aber das scheint wirklich hackig zu sein.
Angesichts der Tatsache, dass Ubuntu 12.04 (standardmäßig) Aliase / bin / sh in / bin / dash ist und meine Standard-Shell / bin / bash ist, gibt es einen einzigen Ort, an dem ich den PATH ändern und Umgebungsvariablen definieren kann, wenn ich sie möchte unter all diesen Umständen anwesend sein :
- Immer wenn ich eine Bash-Shell ohne Login erstelle (mit dem Terminal in Unity)
- Immer wenn ich eine Login-Bash-Shell erstelle (z. B. Remote-Anmeldung über ssh)
- Immer wenn ich einen Unity-Anwendungsstarter verwende (vorausgesetzt, der Starter verwendet / bin / sh).
- Immer wenn ein Cron-Job ausgeführt wird (vorausgesetzt, SHELL = / bin / sh in / etc / crontab).
Wenn ich richtig verstehe, vermute ich das:
- (1) / (2) und (3) / (4) sind unterschiedlich, weil (1) / (2) Bash und (3) / (4) Bindestrich sind.
- (1) und (2) unterscheiden sich, da die Dateien, die bash zum Laden auswählt, unterschiedlich sind, je nachdem, ob es sich um eine Anmeldeshell handelt oder nicht.
- (3) und (4) sind unterschiedlich, da (3) irgendwann nach dem Anmelden eintrifft (und daher ~ / .profile von einem seiner übergeordneten Prozesse bezogen wurde, während (4) irgendwann eintritt Punkt, an dem ich nicht angemeldet bin und daher ~ / .profile nicht gelesen wurde.
(Ich wäre nicht überrascht, wenn auch andere Faktoren eine Rolle spielen würden, z. B. ob die Shell interaktiv ist oder nicht. Daher gibt es wahrscheinlich mehr Kombinationen, mit denen ich nicht einmal gerechnet habe ... Ich bin froh, dass meine Frage "verbessert" wurde " In diesem Fall.)
Ich würde erwarten, dass irgendwann jemand eine Art Leitfaden erstellt hat, der Ihnen sagt, wie / wo Umgebungsvariablen auf eine Shell-unabhängige Weise (oder zumindest auf eine Dash / Bash-kompatible Weise) geändert werden können ... Ich kann es einfach. ' Es scheint nicht die richtigen Suchbegriffe zu finden, um einen solchen Leitfaden zu finden.
Lösungen oder Hinweise auf Lösungen sehr geschätzt!
Aktualisiert:
- Erläuterung: Dies ist der Standard-Ubuntu-Benutzer, der durch den 12.04-Installationsprozess erstellt wurde. Es hat ein ~ / .profile (das explizit ~ / .bashrc angibt), und die einzigen vorhandenen ~ / .bash * -Dateien sind .bashrc, .bash_history und .bash_logout ... also nein, es gibt kein .bash_profile.
- Schwerpunkt auf -umfang: Ich weiß nicht wirklich über alle Shells anders als der Standard interaktiv Shell (bash) und jeden Skript kümmern , die (aliased zu Bindestrich) zu verwenden / ist / sh geschieht, so gibt es keine Notwendigkeit , diese mit etwas zu erschweren zusätzlich für tcsh / ksh / zsh / etc. Unterstützung.