Dove viene impostato $ PATH in OS X 10.6 Snow Leopard?


139

Digito echo $PATHsulla riga di comando e ottengo

/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

Mi chiedo dove si stia sistemando poiché il mio .bash_loginfile è vuoto.

Sono particolarmente preoccupato che, dopo aver installato MacPorts, abbia installato un sacco di spazzatura /opt. Non penso che questa directory esista anche in una normale installazione di Mac OS X.

Aggiornamento: grazie a jtimberman per aver corretto la mia echo $PATHdichiarazione


5
commento di SMcCandlish :easiest solution when you want to make a site-wide path change (e.g. to include /usr/libexec or whatever) is to edit /etc/paths . While the new /etc/paths.d/ thing is functional, it's actually more hassle than maintaining a single file. As others have hinted but not spelled out, if the path changes you want would be useful only for one user, it's best to make that change in the bash and/or tcsh config files in that user's home directory instead of system-wide.
Sathyajith Bhat

@Sathya, mi sembra /etc/paths.dutile per gli script di installazione. Se voglio che il mio script di installazione aggiunga il programma installato al percorso, posso rilasciare un file /etc/paths.d. Se voglio modificare manualmente il percorso, /etc/pathsè un'opzione migliore.
Haydenmuhl,

Ho realizzato uno script basato principalmente su questo post, che stampa rapidamente dove viene definito il PERCORSO lungo queste molteplici posizioni: gist.github.com/lopespm/6407349952bc8a1ff8fb
Pedro Lopes

Risposte:


161

All'avvio bashlegge i seguenti file ogni volta che accedi. Ai fini di OS X, ciò significa ogni volta che apri una nuova Terminalfinestra.

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

Quando si avvia una nuova shell digitando bashsulla riga di comando, si legge.bashrc

OS X utilizza anche ~/.MacOSX/environment.plistper impostare più variabili di ambiente, inclusi i percorsi, se necessario.

Infine, /etc/pathse /etc/paths.dvengono letti anche dalla shell.


/opt/local/binecc. vengono aggiunti ~/.tcshrcda MacPorts. Assicurati anche di guardare dentro ~/.cshrc.


5
Apparentemente, ~/.MacOSX/environment.plistnon funziona per alcune persone. In Cambia percorso per OS X/etc/paths.d viene descritta un'alternativa utilizzando la cartella . Non l'ho provato.
Arjan,

+1 per ~/.cshrc. Sono andato fuori di testa cercando di capire perché ~/.profilenon funzionava.
tomlogic,

Penso che questa risposta sia incompleta. Sto cercando di capire dove si trova un percorso errato (inesistente): / usr / bin / local, la mia shell si lamenta e non si trova in nessuno di questi file.
Tommy

Penso che .bashrcsia letto indipendentemente dal fatto che tu digiti basho meno.
Xiao Peng - ZenUML.com

48

Date un'occhiata al file /etc/paths, che viene utilizzato da /usr/libexec/path_helper, che viene utilizzato da /etc/profile.

Per MacPorts, utilizzare sudo /etc/paths/opt/local/bine riaprire la finestra del terminale.


25

Seriamente, Leopard ci ha dato un nuovo modo di aggiungere un percorso. Basta creare un file contenente la parte del percorso che si desidera aggiungere e inserirlo in /etc/paths.d

Un rapido esempio di ciò in un solo passaggio è:

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

Altrimenti, puoi semplicemente andare su /etc/paths.d e inserire direttamente il file. Ad ogni modo, tutte le parti del percorso nei file in quella directory verranno aggiunte al percorso predefinito.

Questo funziona anche per manpath.

Ecco un link per maggiori dettagli:

ars technica: come posso aggiungere qualcosa a PATH in snow leopard?

In una seconda nota: MacPorts mette tutto nella directory opt proprio perché non viene utilizzato dalle cose di Apple. In questo modo non entrerà in conflitto. La loro guida (scritta in modo eccellente, BTW) ha una spiegazione del perché utilizza opt e come modificare tale impostazione predefinita, se lo desideri.

Guida per MacPorts


Molto bello. Ora dobbiamo solo ottenere quelle applicazioni dipendenti dal percorso per non inquinare più i nostri file di profilo ...
Daniel Beck

Lo adoro. Semplice!
Andrew Hedges,

commento di SMcCandlish :I have to concur that there's nothing weird or bad about MacPorts using /opt (likewise Fink uses /sw); trying to replace stock Mac BSD parts with bleeding-edge builds from external projects like these is a recipe for an unusable system that requires an OS reinstallation.
Sathyajith Bhat

Linea singola, nessuna aggiunta ai file e facile rimozione. Ama questo. Grazie leanne
Ibrahim Lawal,

4

Per mostrare il tuo percorso, fai eco $ PATH.

echo $PATH

Per impostare il tuo percorso, modifica ~/.bash_profile, no ~/.bash_login.


3

C'è anche il percorso determinato da ssh .

Confronta echo $PATHcon ssh localhost 'echo $PATH'. Poiché ssh non legge / etc / profile, / usr / libexec / path_helper non viene eseguito e quindi / etc / percorsi viene saltato. Adesso prova ssh localhost 'source /etc/profile; echo $PATH'. I percorsi dovrebbero essere più vicini. Le differenze rimanenti saranno probabilmente dovute alla modifica del percorso nel tuo .bash_profile (che è anche ignorato da ssh) e .bashrc (che è letto da ssh).

Se vuoi che il tuo percorso ssh sia simile al tuo normale percorso terminale, potresti aggiungere source /etc/profileal tuo .bashrc.


Grazie per il suggerimento! Stavo cercando esattamente la soluzione con ssh. svn + ssh non è riuscito a trovare il comando svnserve esattamente perché il percorso di svnserve era in .profile, ma non era in .bashrc.
KIR,

2

Potrebbe essere definito in:

  • Variabili di sistema - /etc/paths
  • Variabili utente: vedere la spiegazione di @Steve Folly

1

In realtà è memorizzato nel tuo .profilefile anziché .bash_logined è comune che MacPorts userà questo invece del .bash_loginfile.

Inoltre, la /optdirectory viene solitamente creata da MacPorts e memorizza i suoi file in questa cartella.


1

Per quanto riguarda i documenti per /usr/libexec/path_helperutilità, sono stati presi i componenti iniziali per $ PATH /etc/pathse per impostazione predefinita sembra

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

per OS-X Snow Leopard

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.