Comment définir PATH pour les applications lancées par le Finder

70

Les applications lancées via le Finder semblent ne pas respecter le PATH tel qu'il est défini dans .bash_profile. Ainsi, lorsque j'essaie d'exécuter du code à partir d'un IDE (Intellij), je n'ai plus accès aux programmes /usr/local/bin, qui sont normalement ajoutés à mon chemin d'accès dans le terminal.

Apparemment, .MacOSX/environment.plist c'était la façon de procéder, mais cela ne fonctionne plus dans Lion.

Comment définir les PATHapplications lancées par le Finder?

Coma de la caféine
la source
Etes-vous sûr que votre solution acceptée fonctionne sur 10.8?
sorin
1
@SorinSbarnea (je sais que c'est vieux, mais) je peux vérifier que la réponse actuellement acceptée fonctionne pour moi sur OS X 10.8.3, lorsque j'utilise également le hack de redémarrage du dock suggéré . (Je mets cependant une variable d'environnement différente, pas $PATHau cas où ça compte.)
Calrion
voir aussi < stackoverflow.com/questions/829749/… >. C'est à peu près un doublon.
Philipp Kunz

Réponses:

38

Si vous êtes sur 10.7 et non 10.8, la solution ci-dessous fonctionne bien:

J'ai eu le même problème avec eclipse, mais maintenant j'ai ajouté par exemple le suivant à mon .bash_profileet puis ça a fonctionné.

export PATH=some_path:another_path
launchctl setenv PATH $PATH

Si vous souhaitez laisser le chemin d'origine intact, utilisez

p=$(launchctl getenv PATH)
launchctl setenv PATH /my/new/path:$p

à la place (ou juste launchctl setenv PATH /my/new/path:$(launchctl getenv PATH)).

Remarque: La modification de la commande launchctl PATH ne prend effet que lorsque le Dock est "redémarré". Un nouveau processus de Dock démarrera automatiquement après que le processus actuel soit tué avec la commande:

killall Dock
René Larsen
la source
1
J'ai fini par utiliser: "launchctl setenv PATH $ PATH". Ajouter le chemin launchctl existant via "$ p" finit par répéter le chemin chaque fois que vous ouvrez un shell.
Caféine Coma
4
Cela ne fonctionne pas sous OS X 10.8 - essayé avec Eclipse et IntelliJ - set|grep PATHleur retour reviendra toujoursPATH=/usr/bin:/bin:/usr/sbin:/sbin
sorin
1
Ne fonctionne pas pour moi non plus (10.8.1)
nohillside
4
Vous pouvez essayer de redémarrer le quai après la course launchctl: osascript -e 'tell app "Dock" to quit'. Cela a semblé résoudre le problème pour moi.
Ivan Andrus
2
Cela fonctionne pour moi dans 10.12, mais seulement comme un one off. Après le redémarrage de la machine, les effets sont perdus.
Dover8
19

Pour répondre à votre question sur votre «nouveau» problème, j'ai décidé d'écrire une autre réponse, car il est plus facile de l'expliquer à l'aide d'échantillons.

Une façon de charger les variables d'environnement au démarrage de votre outil (IDE) de votre choix est comme cela peut être fait avec eclipse - je pense qu'il doit également y avoir une structure similaire dans votre outil (IDE).

Comment cela peut-il être réalisé dans eclipse - https://stackoverflow.com/questions/829749/launch-mac-eclipse-with-environment-variables-set

(légèrement réécrit sur les variables d'environnement)

Créez un fichier texte vide appelé "eclipse.sh" dans le répertoire du bundle d'applications Eclipse. /Applications/eclipse/Eclipse.app/Contents/MacOS

Ouvrez le fichier eclipse.sh dans un éditeur de texte et entrez le contenu suivant:

#!/bin/sh

. ~/.bash_profile

logger "`dirname \"$0\"`/eclipse"

exec "`dirname \"$0\"`/eclipse" $@

Dans le Terminal, définissez le drapeau exécutable du script shell eclipse.sh, c'est-à-dire:

chmod +x /Applications/eclipse/Eclipse.app/Contents/MacOS/eclipse.sh

Ouvrez le fichier Info.plist Eclipse.app et modifiez la valeur de la clé CFBundleExecutable de eclipse à eclipse.sh.

MacOS X ne détecte pas automatiquement que le fichier Info.plist d’Eclipse.app a changé. Par conséquent, vous devez forcer la mise à jour de la base de données LaunchService dans le terminal à l'aide de la commande lsregister:

/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -v -f /Applications/eclipse/Eclipse.app

Lors du prochain lancement du fichier Eclipse.app à partir du Dock ou du Finder, les variables d’environnement doivent être définies.

René Larsen
la source
+1 pour une explication claire et précise, et pour le fait que plus de six ans plus tard, cela fonctionne toujours avec High Sierra, 10.13.x.
dgnuff
16

Sous OS X 10.10 Yosemite, j'ai utilisé cette commande:

sudo launchctl config user path <my path setting>

Sachez que cela définit le launchtl PATH pour tous les utilisateurs . Cela a bien fonctionné pour mon cas d'utilisation. Notez que vous serez invité à redémarrer votre ordinateur pour que les effets prennent effet.

brki
la source
Cela ne semble pas avoir d'effet sur la variable d'environnement PATH des applications qui sont rouvertes lors de la connexion (qui étaient ouvertes lors de la fermeture).
Brecht Machiels
4
Cette réponse a fonctionné pour moi. Plus précisément, pour accéder à l'exécutable géré par Brew, je devais sudo launchctl config user path /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbinredémarrer.
JP
C’est la meilleure réponse ici pour ajouter / usr / local / bin aux applications basées sur Homebrew. Les gens s'il vous plaît voter cette réponse! Cela fonctionne également dans 10.11 et 10.12 (non testé dans 10.13 moi-même). Pas besoin de jouer avec environment.plistdans la plupart des cas.
Mark Edington
cela a fonctionné pour moi alors que la réponse acceptée ne fonctionnait pas
MichaelChirico
11

Sur Mountain Lion, tout cela /etc/pathset le /etc/launchd.confmontage n’a aucun effet!

Les forums de développeurs Apple disent:

"Modifiez le fichier Info.plist du fichier .app lui-même afin qu'il contienne un dictionnaire" LSEnvironment "avec les variables d'environnement souhaitées.

~ / .MacOSX / environment.plist n'est plus pris en charge. "

J'ai donc directement modifié l'application Info.plist(cliquez avec le bouton droit de la souris sur "AppName.app" (dans ce cas, SourceTree), puis sur " Show package contents")

Afficher le contenu du paquet

et ajouté une nouvelle paire clé / dict nommée:

<key>LSEnvironment</key>
<dict>
     <key>PATH</key>
     <string>/Users/flori/.rvm/gems/ruby-1.9.3-p362/bin:/Users/flori/.rvm/gems/ruby-1.9.3-p362@global/bin:/Users/flori/.rvm/rubies/ruby-1.9.3-p326/bin:/Users/flori/.rvm/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:</string>
</dict>

(voir: Documentation LaunchServicesKeys chez Apple )

entrez la description de l'image ici

maintenant, l'application (dans mon cas, SourceTree) utilise le chemin donné et fonctionne avec git 1.9.3 :-)

PS: Bien sûr, vous devez ajuster l’entrée Path en fonction de vos besoins spécifiques.

Flori
la source
Est-ce vrai? Je vois beaucoup d'articles avec des informations contradictoires, dont certaines sont clairement anciennes, mais d'autres semblent récentes. Je n'ai même pas (sur 10.8.2) un de /etc/launchd.conftoute façon. On peut supposer que , même si les règles stipulent pas que les applications doivent utiliser leurs fichiers Info.plist pour les chemins, ils pourraient encore utiliser d' autres fichiers - /etc/launchd.conf, /etc/paths/ou /etc/paths.d/*, ou `~ / .MacOSX / environment.plist. Est-il prudent de dire alors que, dans la pratique , les chemins d'accès aux applications d'interface graphique de Mountain Lion pourraient être définis dans l'un de ces fichiers?
orome
2
Cette Info.plist était la seule chose qui a fonctionné pour moi, après avoir essayé lauchd.conf, etc. / path etc avec mes Maverics et eclipse. En fait, cela n’a pas fonctionné immédiatement et vous devez vous rappeler deux choses: 1. lancez /System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -v -f /Applications/eclipse/Eclipse.appcomme indiqué dans une autre réponse, après avoir changé de liste de pliste et 2. ajoutez le chemin complet ici, vous ne pouvez pas utiliser PATH existant comme dans vos scripts de profil.
JaakL
Cela fonctionne sur Sierra (10.12). Mais il est toujours nécessaire d'exécuter la lsregistercommande, comme l'a noté @JaakL.
Alastair Harrison
1

On Mountain Lion (10.8.4) $PATHest spécialement traité. launchctl setenv PATH /your/path:/heren'a aucun effet sur les $PATHinstances in Terminal.app ou Emacs.app lancées par la suite à partir du Dock ou du Finder (alors que cela launchctl setenv SPONG foofonctionne correctement). Aussi $HOME/.launchd.confne fonctionne pas. /etc/launchd.confC’est le seul moyen que j’ai trouvé d’obtenir PATH correctement partout. Malheureusement, on ne peut pas utiliser d’envars comme $HOMEici, alors tous les utilisateurs de mon ordinateur portable ont /Users/nb/binsur leur ordinateur $PATH. C'est seulement moi, alors je m'en fiche.

Nick Barnes
la source
Vous devriez constater que le processus Terminal prend la PATHvaleur que vous avez définie, mais que: lorsque vous créez un nouveau terminal, il lance un shell de connexion qui, si vous utilisez bash /etc/profile, est exécuté , ce qui initialise PATHla valeur renvoyée /usr/libexec/path_helper. Si vous choisissez Shell> Nouvelle commande… et que vous exécutez env(pas dans un shell), vous devriez trouver que PATHc'est la valeur que vous avez définie via launchd.
Chris Page
-1

Essayez de définir le chemin dans votre ~ / .profile ou ~ / .bash_profile ou ~ / .zprofile (pour zsh). Cela fonctionnait pour moi avec VimR - la lecture du PATH n’était pas possible lorsque le logiciel était lancé depuis le quai, mais elle fonctionnait lorsque le logiciel était lancé depuis le terminal. Je courais sur OSX 10.11 en passant.

Je ne suis pas assez au courant pour vous expliquer en détail pourquoi cela fonctionne. Il existe de nombreuses explications en ligne sur les différents fichiers de configuration et sur ce qu'ils font: https://stackoverflow.com/questions/415403/ quelle est la différence entre bashrc-bash-profile-and-environment

Voir également une discussion similaire ici: https://stackoverflow.com/questions/3344704/path-variable-not-properly-set-in-gvim-macvim-when-it-is-opened-from-the-finder/ 24542893 # 24542893

Adampasz
la source
La question demande comment faire pour les applications lancées à partir de Doc, qui sont identiques à celles de Finder et pour lesquelles vous dites que votre réponse ne fonctionne pas - et nous pouvons expliquer exactement pourquoi cela ne fonctionne pas / ne fonctionne pas
utilisateur151019
-3

Sur Mac OS X 10.8.4, Mountain Lion, l’environnement des chemins intègre les chemins répertoriés dans ce fichier:

/etc/paths

Vous pouvez modifier ce fichier à l'aide d'un outil de ligne de commande, tel que vimla commande suivante:

sudo vim /etc/paths
utilisateur1814739
la source