Gli elementi aggiunti ai percorsi tramite i percorsi.d vengono visualizzati ovunque sotto Mavericks

0

Mi piacerebbe impostare il percorso sotto OS X Mavericks in modo che l'impostazione si visualizzi ovunque (ad es. in .apps e nelle shell di Darwin). Sono disponibili molte discussioni su come impostare le variabili d'ambiente in genere sotto OS X . Con environments.plist non più supportato da Mavericks , sembra che modifica /etc/launchd.conf è l'opzione migliore per farlo. Purtroppo, launchd.conf a quanto pare non fa espansione dei parametri , quindi non posso farlo:

setenv PATH /Users/kuzzooroo/anaconda/bin:$PATH

e non voglio hardcode il mio intero percorso - sembra irrinunciabile.

C'è un'altra domanda in AskDifferent su impostazione della variabile di ambiente PATH a livello di sistema in Mavericks . La soluzione accettata è per utilizzare /etc/paths.d/ , ma qualcuno ha pubblicato il seguente commento (che ha raccolto diversi uptotes) come avvertenza:

Paths in paths.d are added to the path by path_helper, which is run from /etc/profile and /etc/csh.login, but not when for example bash is invoked as a non-interactive or non-login shell or when you run programs in text editors.

C'è un modo per far sì che questi ambienti inseriscano percorsi.d (ad esempio, inserendo un comando per elaborare i percorsi.d in un file di configurazione bash eseguito anche per shell non interattive)?

    
posta kuzzooroo 07.04.2014 - 03:29
fonte

1 risposta

0

Opzione 1: usa /etc/launchd.conf

Aggiungi una riga come

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

a /etc/launchd.conf e riavvia per applicare le modifiche.

Il percorso predefinito è /usr/bin:/bin:/usr/sbin:/sbin .

/etc/launchd.conf si applica a tutti i processi, che include applicazioni grafiche, shell non di accesso e programmi avviati dai lavori di avvio.

Modifica /etc/launchd.conf manualmente se vedi che alcuni programmi o programmi di installazione hanno aggiunto nuovi percorsi a /etc/paths o /etc/paths.d/* .

Opzione 2: utilizzare un lavoro di avvio per impostare il percorso durante l'avvio

Salva questo plist come /Library/LaunchDaemons/setpath.plist :

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>Label</key>
  <string>setpath</string>
  <key>ProgramArguments</key>
  <array>
    <string>bash</string>
    <string>-c</string>
    <string>launchctl setenv PATH "$((launchctl getenv PATH|tr : \n
    cat /etc/paths /etc/paths.d/*)|awk '!a[$0]++'|paste -sd: -)"</string>
  </array>
  <key>RunAtLoad</key>
  <true/>
</dict>
</plist>

Il programma dovrebbe essere eseguito al prossimo riavvio. Cambia il PATH del processo root launchd , che viene ereditato dal processo launchd dell'utente.

A mio parere, è più semplice modificare /etc/launchd.conf però.

Opzione 3: esegui bash path_helper anche per shell non di login

path_helper viene eseguito da /etc/profile , /etc/zshenv e /etc/csh.login . zsh legge /etc/zshenv anche per shell non di login ma bash non legge /etc/profile per shell non di login.

Questo rende bash eseguito path_helper per shell interattive non di login e per shell non di login non interattive:

echo 'eval $(/usr/libexec/path_helper -s)'>>~/.bashrc
setenv BASH_ENV /etc/profile|sudo tee -a /etc/launchd.conf

Non rende bash run path_helper per shell non interattive non interattive richiamate come sh . Inoltre, non influisce sulle applicazioni grafiche o sui processi che non sono stati avviati dalle shell.

    
risposta data 10.04.2014 - 11:04
fonte

Leggi altre domande sui tag