11 votes

Définir la variable PATH pour qu'elle soit détectée dans toutes les applications, même en dehors du terminal. (El Captain)

Mon ~/etc/path se présente comme suit :

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

Le problème :

Quand je tape echo $PATH dans le terminal, je reviens :

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

Et cela persiste pour chaque application lancée dans le terminal. Par exemple, si je tape emacs et ensuite faire :

M-x getenv PATH

Mon résultat est :

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

Cependant, si je démarre emacs en utilisant launchpad au lieu de terminal et que je saisis à nouveau M-x getenv PATH mon résultat est plutôt /usr/bin:/bin:/usr/sbin:/sbin .

Comme vous pouvez le voir, mon changement de ~/etc/path qui était l'addition de /usr/local/bin est manquant.

Un autre exemple :

J'utilise un plugin Firefox appelé vimperator qui émule la fonctionnalité vim dans Firefox. Il dispose d'une fonctionnalité qui permet à l'utilisateur de modifier les entrées d'une page Web dans vim. Cependant, cela ne semble pas fonctionner sous OS X. Sur une intuition, je tape la commande !echo $PATH dans vimperator et voir ce qui suit : /usr/bin:/bin:/usr/sbin:/sbin . Bien sûr, puisque le lien symbolique appelé gvim ce qui indique macvim a été créé et placé dans /usr/local/bin par la brasserie, ce comportement est logique. Ce que je ne comprends pas, c'est pourquoi le PATH est lu comme il l'est.

Solutions que j'ai essayées :

  • J'ai évidemment redémarré ma machine.

EDIT (Comme demandé par le commentaire maintenant supprimé) :

en utilisant sysctl user.cs_path dans le terminal s'affiche :

user.cs_path: /usr/bin:/bin:/usr/sbin:/sbin

10voto

Michael Zhou Points 167

En loginwindow définit l'environnement d'un utilisateur. Il définit les variables TMPDIR et PATH, consulte les services d'annuaire et définit SHELL HOME USER LOGNAME . PATH est défini comme suit /usr/bin:/bin:/usr/sbin:/sbin sauf si elle est modifiée par launchd (dans les versions les plus récentes de OS X). Il s'agit de la variable PATH disponible pour les processus de l'utilisateur, sauf si elle est modifiée par ce processus particulier ( cron par exemple, définit le PATH à /bin:/usr/bin ).

Les applications d'émulation de terminal démarrent votre shell comme un shell de connexion ; le PATH est donc modifié par la lecture des différents fichiers de démarrage du shell. Tout processus lancé par votre shell hérite maintenant de la nouvelle variable PATH. Les autres applications utilisant un shell ne lisent pas les fichiers de configuration du shell et utilisent les variables d'environnement disponibles dans l'environnement actuel. Une application peut modifier l'environnement en utilisant la fonction LSEnvironment dans leur Info.plist .

À partir de Yosemite, vous pouvez modifier la variable PATH sous la forme suivante.

sudo launchctl config user path <path>

dans votre cas vous voulez /usr/local/bin au début du chemin.

sudo launchctl config user path /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin

reboot votre système et le nouveau PATH sera défini par loginwindow .

-1voto

Michael Tunnell Points 4117

Fais ça :

launchctl setenv PATH "$PATH"

EDIT : Cela ne fonctionne plus. Utilisez ceci avec Bash à la place :

CURRENT="$(/usr/libexec/PlistBuddy -c "Print PATH" ~/.MacOSX/environment.plist)"
/usr/libexec/PlistBuddy -c "Set PATH $CURRENT:/your/path/here:/another/path/maybe" ~/.MacOSX/environment.plist

Ensuite, déconnectez-vous et reconnectez-vous.

Note : Vous pouvez remplacer $CURRENT:/your/path/here:/another/path/maybe avec juste une liste de chemins comme :/your/path/here:/another/path/maybe mais c'est une mauvaise idée car cela effacera tous les chemins déjà stockés.

Cela utilise Variables d'environnement de la session utilisateur .

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X