2009-11-11 18:48:39 +0000 2009-11-11 18:48:39 +0000
141
141

Waar wordt $PATH ingesteld in OS X 10.6 Snow Leopard?

Ik typ echo $PATH op de opdrachtregel en krijg

/opt/local/bin:/opt/local/sbin:/Users/andrew/bin:/usr/local/bin:/usr/local/mysql/bin:/usr/local/pear/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin:/opt/local/bin:/usr/local/git/bin

Ik vraag me af waar dit wordt ingesteld aangezien mijn .bash_login bestand leeg is.

Ik ben vooral bezorgd dat, na de installatie van MacPorts, het een hoop troep in /opt heeft geïnstalleerd. Ik denk dat die directory niet eens bestaat in een normale Mac OS X installatie.

Update: Met dank aan jtimberman voor het corrigeren van mijn echo $PATH verklaring

Ответы (7)

161
161
161
2009-11-11 20:57:32 +0000

Als bash start leest het de volgende bestanden elke keer dat je inlogt. In het kader van OS X betekent dit elke keer dat je een nieuw Terminal venster opent.

/etc/profile
~/.bash_profile
~/.bash_login (if .bash_profile does not exist)
~/.profile (if .bash_login does not exist)

Wanneer je een nieuwe shell start door bash op de commandoregel te typen, leest hij .bashrc

OS X gebruikt ook ~/.MacOSX/environment.plist om meer omgevingsvariabelen in te stellen, inclusief paden indien nodig.

Ten slotte worden /etc/paths en /etc/paths.d ook door de shell gelezen.

  • *

/opt/local/bin enz. worden in ~/.tcshrc toegevoegd door MacPorts. Kijk ook in ~/.cshrc.

25
25
25
2011-03-25 18:07:37 +0000

Serieus, Leopard gaf ons een nieuwe manier om een pad toe te voegen. Maak gewoon een bestand aan met het paddeel dat je wilt toevoegen, en zet het in /etc/paths.d

Een snel voorbeeld om dit in één stap te doen is:

echo "/some/path/to/add" >> /etc/paths.d/somefilename

Anders kun je ook gewoon naar /etc/paths.d gaan en het bestand daar direct neerzetten. Hoe dan ook, alle paddelen in de bestanden in die directory zullen worden toegevoegd aan het standaardpad.

Dit werkt ook voor manpath.

Hier is een link naar meer details: ars technica: hoe voeg ik iets toe aan PATH in snow leopard?

Een tweede opmerking: MacPorts zet alles in de opt directory juist omdat die niet gebruikt wordt door Apple’s spul. Op die manier zal het niet conflicteren. Hun gids (uitstekend geschreven, BTW) heeft een uitleg waarom het opt gebruikt en hoe je die standaard kunt veranderen als je dat zou willen. MacPorts Gids

4
4
4
2009-11-11 19:07:28 +0000

Om je pad te tonen, echo $PATH.

echo $PATH

Om je pad in te stellen, bewerk je ~/.bash_profile, niet ~/.bash_login.

3
3
3
2012-02-07 19:36:18 +0000

Er is ook nog het pad zoals bepaald door ssh.

Vergelijk echo $PATH met ssh localhost 'echo $PATH'. Omdat ssh /etc/profile niet leest, draait /usr/libexec/path_helper niet en wordt /etc/paths dus overgeslagen. Probeer nu ssh localhost 'source /etc/profile; echo $PATH'. De paden zouden dichter bij elkaar moeten liggen. De resterende verschillen zullen waarschijnlijk te wijten zijn aan padaanpassingen in uw .bash_profile (dat ook door ssh wordt overgeslagen) en .bashrc (dat door ssh wordt gelezen).

Als u wilt dat uw ssh-pad gelijk is aan uw normale terminalpad, zou u source /etc/profile aan uw .bashrc kunnen toevoegen.

2
2
2
2013-06-01 09:50:21 +0000

Het kan worden gedefinieerd in:

  • Systeemvariabelen - /etc/paths
  • Gebruikersvariabelen - zie @Steve Folly’s uitleg
1
1
1
2009-11-11 19:13:39 +0000

Eigenlijk wordt het opgeslagen in uw .profile bestand in plaats van .bash_login en het is gebruikelijk dat MacPorts dit gebruikt in plaats van het .bash_login bestand.

Ook de /opt map wordt meestal door MacPorts aangemaakt en het slaat zijn bestanden in deze map op.

1
1
1
2012-06-26 01:40:17 +0000

Betreffende docs voor /usr/libexec/path_helper utility, initiële componenten voor $PATH werd genomen van /etc/paths en ziet er standaard uit als

/usr/bin
/bin
/usr/sbin
/sbin
/usr/local/bin

voor OS-X Snow Leopard