Wie lege ich in Mountain Lion an einer Stelle die Umgebungsvariable PATH für alle neu gestarteten Anwendungen fest?

9

Bei Ask Different gibt es viele Fragen zur PATHUmgebungsvariablen und zum Festlegen für Anwendungen, die von einer Shell, im Spotlight oder über den Finder gestartet werden (typische Fragen: Festlegen von PATH für vom Finder gestartete Anwendungen oder Ändern der Umgebungsvariablen PATH. .. ).

Die Antworten reichen von shStartskripten bis /etc/pathszu /etc/launchd.conf. Hier bin ich nach der Antwort für eine einheitliche Einstellung PATHfür alle Apps unter Mac OS X Mountain Lion 10.8.2.

Halloleo
quelle

Antworten:

14

Nach vielen Versuchen mit verschiedenen Optionen schließe ich:

Gibt es eine einheitliche Möglichkeit , die PATHfür Anwendungen festzulegen, die mit verschiedenen Mitteln (wie Shell-Skript, Finder und Spotlight) gestartet wurden? Ja und nein:

  • Nein : Das Festlegen PATHvon Shell-Startskripten (z. B. .bashrc) funktioniert nur für Apps, die von Shells gestartet werden.
  • Nein : Die Einstellung PATHfür den aktuellen launchdProzess über launchctl setenv PATH <...>funktioniert bei mir überhaupt nicht.
  • Ja : Einstellung PATHin /etc/launchd.conf(und Neustart des Systems) wird die entsprechende machen PATHsichtbar in Anwendungen von Spotlight, Dock und Finder und anschließend (lokal) Schalen gestartet.
  • Nein : Remotely aufgerufen Schalen haben nicht erben die Umwelt. (Siehe ... warum erben Remote-Shells über ssh NICHT die Umgebung .. )

Hinweise zum Aufbau von Muscheln:

  1. Für die korrekte Funktion in lokalen Shells ist es wichtig, die Verwendung von auszuschalten/usr/libexec/path_helper , da die Standardpfade in /etc/pathsdie Reihenfolge der Pfade in ändern können PATH. **

  2. Um Remote- Shells aufzunehmen, müssen Sie die launchdUmgebung erneut in die Shell importieren . Verwenden Sie so etwas in Ihrem .bashrc:

# the vexatious path stuff
eval $(launchctl export)

Die unglücklichen Folgen des gesamten Problems sind:

  • Es gibt keine Möglichkeit, diese einheitlichen Einstellungen pro Benutzer festzulegen. ( ~/.launchd.conffunktioniert nicht.)
  • Keine einfache Möglichkeit, den PATH aus verschiedenen Quellen mithilfe von Techniken wie der Erweiterung des Home-Verzeichnisses et al.
Halloleo
quelle
Update: Das Festlegen von PATH via /etc/launch.conffunktioniert nicht für Shells, die remote über ssh angemeldet sind (ich gehe davon aus, dass das sshdseine von seinem übergeordneten launchdShell geerbte Umgebung nicht an die untergeordnete Shell weitergibt). - Ich werde die Antwort entsprechend bearbeiten.
Halloleo
Antwort aktualisiert mit einer Lösung für Remote-Shells.
Halloleo
1
Gute Antwort; Sie können die Beschaffung der Startumgebung wie folgt vereinfachen : eval "$(launchctl export)".
mklement0
Eine einfache Möglichkeit zum Bearbeiten /etc/launchd.confbesteht darin, einfach auszuführen sudo -e /etc/launchd.conf(wenn Sie mit vi vertraut sind) oder EDITOR=nano sudo -e /etc/launchd.conf(wenn Sie einen nicht modalen Editor bevorzugen).
Nohillside
3

Wenn Sie die vorherige Antwort erweitern , um den Pfad zu ändern /etc/launchd.conf, müssen Sie Folgendes tun.

  1. Stellen Sie sicher, dass Sie über Administratorrechte verfügen.

  2. Erstellen Sie eine neue Textdatei mit dem folgenden Inhalt, der Ihren Anforderungen entspricht:

    setenv PATH /usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/Users/YourUserName/bin
    
  3. Speichern Sie es in Ihrem Home-Verzeichnis als launchd.conf.

  4. Öffnen Sie Terminal.app (oder Ihren bevorzugten Ersatz) und geben Sie Folgendes ein:

    sudo mv ~/launchd.conf /etc

    Abhängig von Ihrer vorherigen Verwendung des sudoBefehls wird möglicherweise die kurze Meldung "Seien Sie vorsichtig, was Sie tun" angezeigt. In beiden Fällen müssen Sie jedoch Ihr Kennwort eingeben. Der Befehl verschiebt lediglich die Datei in das /etcVerzeichnis, auf das beispielsweise beim Speichern einer Datei in TextEdit nicht direkt zugegriffen werden kann. sudo(kurz für "Super User DO") wird verwendet, da Administratorrechte zum Schreiben in dieses Verzeichnis erforderlich sind.

  5. Starte deinen Computer neu.

Und du solltest fertig sein. Viel Glück!

MattDMo
quelle
Vielen Dank für die Details, aber es ging nicht darum, wie Änderungen vorgenommen werden können launchd.conf, sondern darum, wie alle Anwendungen auf einheitliche Weise dieselbe PATH-Variable erhalten.
Halloleo
Richtig, aber ich habe ursprünglich nach der Frage gesucht, wie PATHich die Einstellungen für meine GUI-Apps
vornehmen soll
Sie haben hier einen gültigen Punkt; Dennoch denke ich, dass die Integration Ihrer Informationen in die Antwort die bessere Option ist. - Ich denke, dieser Kommentarthread wird zu einer Metadiskussion, daher habe ich ihn auf meta.stackoverflow als Was mit einer zusätzlichen Antwort zu tun
halloleo
1
Sollte dies nicht auf meta.apple.stackexchange.com gewesen sein?
MattDMo
In der Tat wäre meta.apple.stackexchange.com der richtige Ort gewesen. Ich wusste nur nicht, dass es existiert ...
Halloleo
-2

Sie können https://github.com/ersiner/osx-env-sync ausprobieren.

Es verarbeitet sowohl Befehlszeilen- als auch GUI-Apps aus einer Hand . Und es funktioniert mit der neuesten Version von OS X (Yosemite).

Ersin Er
quelle
Was nur die andere Antwort mit dem Bit automatisiert, von dem er sagt, dass es nicht funktioniert, z. B. launchctl setenv PATH <...>
user151019
@Mark Dies hat hier nichts mit der Automatisierung von Antwortschritten zu tun. Dieser verwendet einen Launch Agent. Ich schlage vor, Sie versuchen es.
Ersin Er
Die akzeptierte Lösung verwendet auch das launchdSystem. Ihre Lösung weist dieselben Probleme auf wie in der akzeptierten Antwort angegeben.
Halloleo
@halloleo Hast du es tatsächlich versucht? Und auf welcher Version von OS X?
Ersin Er