Vraag Hoe stel ik de globale PATH omgevingsvariabele in OS X in?


Ik wil graag toevoegen aan de globale PATH-omgevingsvariabele in OS X, zodat alle gebruikersshells en GUI-toepassingen dezelfde PATH-omgeving krijgen.

Ik weet dat ik kan toevoegen aan het pad in shell-opstartscripts, maar deze instellingen worden niet overgenomen door GUI-toepassingen.

De enige manier die ik tot nu toe heb gevonden, is om de omgevingsvariabele PATH opnieuw te definiëren in /etc/launchd.conf:

setenv PATH /usr/bin:/bin:/usr/sbin:/sbin:/my/path

Ik kon geen manier bedenken om daadwerkelijk aan PATH toe te voegen launchd.conf.

Ik maak me een beetje zorgen over deze methode, maar tot nu toe is dit het enige dat werkt. Is er een betere manier?


97
2018-05-31 19:08


oorsprong


Zien: stackoverflow.com/questions/347286 - rjmunro
Voor Yosemite en later, zie stackoverflow.com/questions/25385934/... - thSoft
Geen van de antwoorden hier gaat in op de vraag van het OP. Maar de opmerking hier door thSoft is goed voor het geld! Misschien moet dit worden samengevoegd of gekoppeld aan die vraag waarnaar wordt verwezen: stackoverflow.com/questions/25385934/... - Kevin Buchs


antwoorden:


palmer's GUI-informatie is correct, maar er is een beter onderhoudbare manier om het pad van de shell te wijzigen. Net zoals mediaslave zei, je kunt bewerken /etc/paths, maar nog beter kun je een tekstbestand laten vallen /etc/paths.d/ die een pad bevat en alle shells het pad correct construeren.

Bijvoorbeeld op mijn systeem:

$ cat /etc/paths
/usr/bin
/bin
/usr/sbin
/sbin
/usr/local/bin
$ ls /etc/paths.d
X11       git      postgres
$ cat /etc/paths.d/postgres
/Library/PostgreSQL/8.4/bin
$ echo $PATH
/opt/local/bin:/opt/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/git/bin:/Library/PostgreSQL/8.4/bin:/usr/X11/bin:/usr/local/mysql/bin

70
2018-05-28 06:53



Leuk Bedankt! Opmerking: dit vereist dat u zich afmeldt en opnieuw aanmeldt voordat het werkt. - weronika
@weronika: Ik vond dat het voldoende was om te stoppen en opnieuw te starten X11 (minder pijnlijk dan helemaal uitloggen). Ik heb het niet geprobeerd Terminal. - Peter Gluck
Ik verwees naar Terminal - je hebt gelijk, ik vergat te specificeren. - weronika
Dit is goed om te weten, maar het beantwoordt de OP's vraag NIET, omdat dit mechanisme niet van toepassing is op GUI-apps. Het OP was op zoek naar een unified oplossing die hem in staat stelt toevoegen naar de standaard $PATH. - mklement
wat bedoel je hier met "mijn systeem", @cogg? Gebruiken we OS X hier niet allemaal? Sorry maar ik ben nog nieuw in OS X. Ik gebruik OS X 10.7 - ericn


/etc/launchd.conf

De launchd.conf file is ** de enige complete oplossing die werkt voor zowel command line- als GUI-applicaties OS X v10.8 (Mountain Lion) en v10.9 (Mavericks), een die werkt met GUI en console-applicaties, voor alle gebruikers.

sudo touch /etc/launchd.conf
sudo nano /etc/launchd.conf

Toevoegen

setenv PATH /usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin

In het bovenstaande voorbeeld heb ik toegevoegd /usr/local/bin naar de standaard omgevingswaarden voor PATH.

Houd er rekening mee dat dit bestand geen script is en dat je niet de mogelijkheid hebt om vervangingen te gebruiken. Om deze te laten toepassen, moet je ook opnieuw opstarten.

Vergeet niet dat alle andere slechts gedeeltelijke oplossingen zijn:

  • environment.plist werkt niet voor toepassingen die worden gestart via Spotlight.
  • /etc/paths - alleen voor console
  • /etc/csh.cshrc of /etc/bashrc - alleen voor sommige shells

Dit antwoord is gebaseerd op dezelfde vraag van Omgevingsvariabelen instellen op Mac OS X.


47
2018-06-04 20:30



Geweldige vondst, maar de vraag spreekt al over launchd en vraagt ​​om hoe toevoegen naar het pad erin. - cregox
Heb je echt een opmerking toegevoegd aan de oorspronkelijke vraag die naar jezelf verwijst als "het echte antwoord"? - TJ Luoma
Het wordt geïmpliceerd door je - behulpzame - antwoord, maar alleen om het uit te spellen: de wens van het OP om toevoegen naar het standaardpad wordt niet ondersteund, omdat u niet kunt verwijzen naar andere omgevingsvariabelen in /etc/launchd.conf. - mklement
Het is niet globaal - de opdrachtregelomgeving zal dit weggooien wanneer / etc / profile path_helper aanroept en PATH heropbouwt van / etc / paths en /etc/paths.d/ - Dave X
volgens apple.stackexchange.com/questions/106355/..., dit is geen lang werk voor Yosemite of later - ericn


Je zult het op een shell-by-shell basis moeten instellen; Bash en csh-achtige shells delen niet dezelfde configuratiebestanden en syntaxis voor het aanpassen van het PATH.

Dit proberen te doen launchctl zal niet werken, omdat omgevingsvariabelen zijn ingesteld bij inloggen; ze bestaan ​​niet systeembreed in Unix buiten een shell-sessie.

Dus je wilt toevoegen

setenv PATH "$PATH:/add/my/extra/path"

naar /etc/csh.cshrc en

export PATH="$PATH:/more/paths:/

naar /etc/bashrc.

Als u omgevingsvariabelen in GUI-toepassingen wilt, is dat ingewikkelder. Je moet een maken .MacOSX/environment.plist bestand in de basismap van elke gebruiker. De .MacOSX map zal waarschijnlijk niet standaard bestaan, dus je moet het aanmaken.

Het formaat van het bestand is als volgt:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>

    <key>PRINTER</key>
    <string>myprinter</string>

    <key>PATH</key>
    <string>/path/to/thing/I/need</string>

    <key>DISPLAY</key>
    <string>0:1</string>

</dict>
</plist>

Meer over de environment.plist  is op de site van Apple.


7
2018-06-01 12:24



Maar de instellingen worden van kracht wanneer ingesteld in /etc/launchd.conf ... Hmmm ... / ik ben in de war. - Xerxes
Werkelijk? Welke omgevingsvariabele zet je daar? - palmer
Gewoon een update vanaf OS X 10.8: de ~/.MacOSX/environment.plist aanpak wordt niet langer ondersteund en er is geen vervanging op gebruikersniveau. U kunt het hele systeem gebruiken /etc/launchd.conf(en er is een per - *. app-oplossing). - mklement
Beantwoordt de vragen van OP niet. - Kevin Buchs


U kunt uw algemene pad bewerken door regels toe te voegen aan /etc/paths, één pad per regel.

sudo nano /etc/paths zou je daar moeten brengen.


3
2017-09-03 18:04



Dit is goed om te weten, maar het is geen antwoord op de vraag van het OP, omdat dit mechanisme niet van toepassing is op GUI-apps. - mklement


Heb je de manpagina bekeken voor de path_helper opdrachtregelprogramma op OS X? Ik antwoordde a enigszins gerelateerde vraag over SO waarvan ik denk dat je het misschien nuttig vindt.


1
2018-06-01 12:50





Ik weet niet zeker of iemand het heeft gedaan de makkelijkste en het meest elegant manier. Tenminste op Mac OS X v10.6 (Snow Leopard).

Knoeien met de [/etc/|~/.] van [profile|bashrc] bestanden kunnen werken, maar het is een beetje een hack. De /etc/paths.d/ map is de weg te gaan:

  • Sudo in je favoriete editor.
  • Maak een nieuw bestand met de naam *name* (noem het maar niet iets dat er al in zit) in /etc/paths.d/ met een pad per regel:

    /usr/X11/bin
    /Developer/usr/bin
    
  • Dan toevoegen

    eval '/usr/libexec/path_helper -s`
    

    naar profile of bashrcen je zou goed moeten zijn om te gaan.


1
2018-01-31 07:22



Dit is goed om te weten, maar het is geen antwoord op de vraag van het OP, omdat dit mechanisme niet van toepassing is op GUI-apps. - mklement
Is de bestandsnaam letterlijk *name*? Of bedoel je gewoon name? - Peter Mortensen


Ik weet niet zeker of launchd dit accepteert, maar probeer:

setenv PATH "$ PATH: / mijn / pad"

0
2018-05-31 19:26



Helaas werkt dat niet. Het lijkt er niet op dat launchctl gemakkelijk toegang heeft tot omgevingsvariabelen. Er is een opdracht om omgevingsvariabelen op te vragen, maar er is absoluut geen documentatie over hoe u deze kunt gebruiken. - lajos


Ik weet niet zeker waarom je zou gebruiken /etc/launchd.conf in tegenstelling tot /etc/profile - maar ik ben geen expert in Mac OS X - ik geloof dat je daarin zeker weet dat het werkt, maar launchd is de implementatie / vervanging van Mac OS X voor init - Mac OS X verwart me.

Hoe dan ook, setenv PATH "$PATH:/more/paths:/and/more/paths" zal werken (tcsh), en het equivalent van de bourn-shell is export PATH="$PATH:/more/paths:/and/more/paths" - Ik heb geen idee hoe launchd is ook gerelateerd aan een specifieke shell.

Ik denk dat ik meer vragen heb gesteld dan ik heb gezegd =)


0
2018-06-01 04:10



/ etc / profile path-instellingen worden niet gezien door een van de OS X GUI-apps. Dat geldt alleen voor bash. Ik wil dat alle applicaties de nieuwe padinstelling krijgen. - lajos
Juist - bedankt voor het opruimen van dat voor mij :) - Xerxes
Unix? Natuurlijk, het is unix. Ik bedoel, sorta. Ja, we hebben dingen gebroken die al 30 jaar werken, maar het is nog steeds unix! /zucht - Matt Simmons