Définition de la variable d'environnement PATH à l'échelle du système dans Mavericks

41

Dans les versions précédentes du système d'exploitation, il était possible de définir la variable d'environnement PATH à l'échelle du système /etc/launchd.confpour la rendre disponible pour toutes les applications (pas uniquement la ligne de commande).

Dans Mavericks, cela ne semble plus être utilisé.

Existe-t-il une autre technique pour le faire chez les francs-tireurs?

À M
la source

Réponses:

51

Yosemite

/etc/launchd.confn'est plus supporté dans 10.10. Voir man launchctl:

Le fichier /etc/launchd.conf n'est plus consulté pour les sous-commandes à exécuter au tout début du démarrage; cette fonctionnalité a été supprimée pour des raisons de sécurité.

Vous pouvez maintenant par exemple enregistrer ce plist en tant que ~/Library/LaunchAgents/my.startup.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>my.startup</string>
  <key>ProgramArguments</key>
  <array>
    <string>sh</string>
    <string>-c</string>
    <string>launchctl setenv PATH /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin</string>
  </array>
  <key>RunAtLoad</key>
  <true/>
</dict>
</plist>

La launchctl setenvcommande est exécutée en tant qu'utilisateur. Elle ne s'applique donc qu'aux processus lancés dans le domaine utilisateur.

Cette méthode ne s'applique pas aux applications qui sont rouvertes lors de la connexion si l'option "Rouvrir les fenêtres lors de la connexion" est cochée.

Mavericks et plus tôt

Dans 10.9 et les versions antérieures, vous pouvez par exemple exécuter

echo setenv PATH /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin|sudo tee -a /etc/launchd.conf

puis redémarrez pour appliquer les modifications.

Autres méthodes

/etc/pathset /etc/paths.d/ne s'appliquent que (ou principalement) aux coquilles. Les lignes /etc/pathset /etc/paths.d/*sont ajoutées à la voie par path_helper , qui est exécuté à partir de /etc/profile, /etc/zshenv, et /etc/csh.login. Je ne connais pas de programmes autres que des obus qui pourraient être envisagés /etc/pathsou /etc/paths.d/.

~/.MacOSX/environment.plist cessé de travailler dans 10.8.

Lri
la source
2
Oui; il n'existe tout simplement pas par défaut, mais le créer et définir les entrées appropriées aide
mgol
Sur Yosemite, j'ai constaté que certains programmes ne semblaient pas voir PYTHONPATH, ce que j'ai défini dans /etc/launchd.conf et que j'ai utilisé votre correctif de ligne de commande (le deuxième paragraphe de votre réponse) et cela ne semble pas fonctionner. , cela me donne simplement le message d'erreur / d'aide launchctl.
Tango
@Tango j'ai édité la réponse. /etc/launchd.confa été retiré dans 10.10.
Lri
J'ajoute que mon expérience en jouant avec bash est que, le 10.10, launchctl setenv ne semble rien faire. J'ai essayé de définir des variables env, puis vérifié la valeur avec echo et elles n'étaient toujours pas définies.
Tango
1
@Tango Quittez et rouvrez votre application de terminal après avoir exécuté launchctl setenv. launchctl setenvn'a jamais affecté les processus existants.
Lri
11

Il y a un moyen beaucoup plus facile. Placez un fichier texte dans le dossier /etc/paths.d/. Dans ce fichier texte, entrez le chemin souhaité ET une nouvelle ligne. Le meilleur moyen est de créer un nouveau fichier pour chaque chemin.

Sur mon système, il existe un fichier appelé MySQL avec le texte '/ usr / local / mysql / bin' et une nouvelle ligne.

CAryaSil
la source
Je viens tout juste de poser une nouvelle question sur les moyens de remédier à la faiblesse décrite par @LauriRanta.
kuzzooroo
Juste une anacdote: j’ai aussi utilisé cette méthode car c’est la méthode recommandée «OS X». Je n'ai pas eu beaucoup de chance de faire en sorte que le système respecte systématiquement les fichiers PATH que j'ai dans /etc/paths.d, et finit généralement par utiliser la commande export shell ou en plaçant mes PATH dans ~ / .bash_profile, qui fonctionnent toujours. ne serait-ce que pour mon compte d'utilisateur actuel et non pour l'ensemble du système. Si les fichiers PATH dans /etc/paths.d fonctionnent toujours pour vous, alors je suis jaloux que votre système se comporte mieux que le mien;)
chillin
Celui-ci est nouveau pour moi. Agréable!
CousinCocaine
3

Vous pourrez peut-être définir des variables d'environnement dans le fichier /etc/launchd-user.conf...

Dans Mavericks, j'ai pu configurer une variable d'environnement dans le fichier à l'aide de la ligne:

setenv TEST test

Après un démarrage frais, à $TESTpartir /etc/launchd-user.conf est définie.

modifier

Il est possible que la syntaxe du fichier dans /etc/launchd.conf soit invalide. Pouvez-vous poster le contenu de ce fichier pour examen?

De ce que je vois, définir la variable PATH dans /etc/launchd.conf fonctionne normalement. Cependant, launchdn'effectue aucune expansion de paramètre . Par conséquent, si vous avez une entrée comme setenv PATH $PATH:/usr/local/bin, votre chemin résultant serait défini sur " $PATH:/usr/local/bin" (note: pas la valeur de PATH, mais le texte "$ PATH")

Eddie Kelley
la source
Merci, le problème que je rencontre est la configuration de PATH, les autres variables d'environnement semblent fonctionner.
Tom
@Tom - J'ai fourni une suggestion supplémentaire ci
Eddie Kelley
1
Est-ce vraiment launch-user.conf ou launch- [nom_utilisateur_distant] .conf
Shanimal
/etc/launchd.conf contenant 'setenv TEST test' ne se propage pas dans Terminal sur mes Mavericks.
Dave X
Oops: s / Mavericks / Yosemite /.
Dave X
0

sur mon installation Mavericks, l'ajout de "setenv PATH blablabla" à /etc/launchd.conf ne fonctionnait pas après le redémarrage

J'ai donc ajouté mon nouveau chemin à la fin de / etc / chemins, ce qui a fonctionné.

George Dima
la source
Cela n'a pas fonctionné pour moi. J'ai redémarré, /etc/pathscontient tout ce que je veux et pourtant, Sublime ne voit toujours que le PATH d'origine. Si je le lance depuis le terminal, ça marche.
mgol
La commande path_helper de mon / etc / profile utilise / etc / path et /etc/paths.d pour écraser tout PATH éventuellement défini par /etc/launchd.conf
Dave X
0

J'ai découvert que setenv PATH fonctionne toujours pour moi pour Terminal et les applications, mais a cassé des scripts de shell lancés directement en cliquant sur ou en ouvrant un terminal dans, par exemple, du Finder. C'est très étrange. Autres variables d'environnement définies dans le /etc/launchd.conftravail.

Afin de résoudre ce problème pour les scripts shell lancés directement, j’ai dupliqué le paramètre PATH dans ~/.bash_profile.

DKroot
la source
0

Editer /etc/paths.dou utiliser .bash_profilen'a pas fonctionné pour moi, cependant, comme suggéré par quelqu'un d'autre (je suis venu ici pour faire remonter sa réponse, mais je ne pouvais plus la trouver?!), J'ai édité /etc/pathsce qui fonctionne pour moi.

Dans mon cas, j’ai ajouté android-tool adbet androiddes commandes de terminal en indiquant leurs chemins sdk ( adba changé de répertoire de nos jours) et qui ressemblent à

/usr/local/bin
...
/Applications/adt-bundle-mac/sdk/platform-tools  //new entries
/Applications/adt-bundle-mac/sdk/tools
Longi
la source
0

SWEET, en ajoutant que XML dans ~ / Library / LaunchAgents / setenv.SVN.plist permettait à BBEdit d’utiliser les fichiers binaires de subversion que j’avais installés dans / opt.

<clip>
<string>launchctl setenv PATH /opt/subversion/bin:$PATH</string>
<clip>
Mark M
la source
1
Avez-vous une idée de la façon de déterminer si ce fichier prend en charge l’expansion des paramètres? J'ai peut-être défini le chemin pour que celui de / opt soit le seul. Et je pense qu'il est probable que cela ne supporte PAS l'utilisation de $ PATH. Comment détermineriez-vous le chemin existant pour commencer?
Mark M
-1

Ajoutez simplement votre 'bin' (le chemin que vous voulez ajouter) chemin du fichier / etc / path - redémarrez ou reconnectez-vous !!!

sudo vi /etc/paths 
(create a file (paths file) if it does't exist, I am using 'vi' editor, you can use your own as super user )
then, add your bin directory path like below 

/usr/local/mysql/bin
/usr/local/apache-ant-1.9.3/bin
/usr/local/gradle-1.11/bin

sauvegarder le fichier et reloginuer ... espérons que cela vous aidera

code0110
la source