Cómo configurar PATH para aplicaciones lanzadas por Finder

70

Las aplicaciones iniciadas a través de Finder parecen no respetar la RUTA tal como está establecida .bash_profile. Entonces, cuando intento ejecutar el código desde un IDE (Intellij), ya no tengo acceso a los programas /usr/local/bin, que normalmente se agregan a mi ruta en la Terminal.

Aparentemente .MacOSX/environment.plist solía ser la forma de hacerlo, pero ya no funciona en Lion.

¿Cómo puedo configurar las PATHaplicaciones iniciadas por Finder?

Coma cafeína
fuente
¿Está seguro de que su solución aceptada funciona en 10.8?
sorin
1
@SorinSbarnea (Sé que esto es antiguo, pero) puedo verificar que la respuesta aceptada actualmente funciona para mí en OS X 10.8.3, cuando también uso el hack de reinicio de muelle sugerido . (Soy la creación de una variable de entorno diferente, sin embargo, no $PATHen caso de que lo que importa.)
Calrion
ver también < stackoverflow.com/questions/829749/… >. Es casi un duplicado.
Philipp Kunz

Respuestas:

38

Si tiene 10.7 y no 10.8, la solución a continuación funciona bien:

Tuve el mismo problema con eclipse, pero ahora agregué, por ejemplo, lo siguiente a mi .bash_profiley luego funcionó.

export PATH=some_path:another_path
launchctl setenv PATH $PATH

En caso de que desee dejar la ruta original intacta, use

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

en su lugar (o simplemente launchctl setenv PATH /my/new/path:$(launchctl getenv PATH)).

Nota: Cambiar la ruta launchctl no tendrá efecto hasta que el Dock se "reinicie". Un nuevo proceso de Dock se iniciará automáticamente después de que se elimine el actual con el comando:

killall Dock
René Larsen
fuente
1
Terminé usando: "launchctl setenv PATH $ PATH". Agregar la ruta de launchctl existente a través de "$ p" termina repitiendo la ruta cada vez que abre un shell.
Cafeína Coma
44
Esto no funciona en OS X 10.8 - trató con Eclipse y IntelliJ - corriendo set|grep PATHde ellos siempre devolveráPATH=/usr/bin:/bin:/usr/sbin:/sbin
Sorin
1
Tampoco funciona para mi (10.8.1)
nohillside
44
Usted puede tratar de reiniciar el muelle después de correr launchctl: osascript -e 'tell app "Dock" to quit'. Eso pareció arreglarlo para mí.
Ivan Andrus el
2
Esto funciona para mí en 10.12, pero solo como una vez. Después de reiniciar la máquina, los efectos se pierden.
Dover8
19

Para responder su pregunta a su "nuevo" problema, he decidido escribir otra respuesta, porque es más fácil de explicar con ejemplos.

Una forma de cargar las variables de entorno en el inicio de su herramienta (IDE) de elección es como se puede hacer con eclipse: creo que también debe haber una estructura similar en su herramienta (IDE).

Cómo se puede hacer en eclipse - https://stackoverflow.com/questions/829749/launch-mac-eclipse-with-environment-variables-set

(ligeramente reescrito sobre las variables de entorno)

Cree un archivo de texto vacío llamado "eclipse.sh" en el directorio del paquete de la aplicación Eclipse /Applications/eclipse/Eclipse.app/Contents/MacOS

Abra eclipse.sh en un editor de texto e ingrese los siguientes contenidos:

#!/bin/sh

. ~/.bash_profile

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

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

En la Terminal, configure el indicador ejecutable del script de shell eclipse.sh, es decir:

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

Abra Eclipse.app Info.plist y cambie el valor de la clave CFBundleExecutable de eclipse a eclipse.sh.

MacOS X no detecta automáticamente que la lista de información de Eclipse.app ha cambiado. Por lo tanto, debe forzar la actualización de la base de datos LaunchService en la Terminal mediante el comando lsregister:

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

La próxima vez que inicie Eclipse.app desde el Dock o desde el Finder, se deben establecer las variables de entorno.

René Larsen
fuente
+1 para una explicación clara y precisa, y por el hecho de que más de seis años después, esto todavía funciona con High Sierra, 10.13.x.
dgnuff
16

En OS X 10.10 Yosemite, utilicé este comando:

sudo launchctl config user path <my path setting>

Tenga en cuenta que establece la ruta de lanzamiento para todos los usuarios . Esto funcionó bien para mi caso de uso. Tenga en cuenta que se le pedirá que reinicie su máquina para que los efectos se establezcan.

brki
fuente
Esto no parece tener un efecto en la variable de entorno PATH de las aplicaciones que se vuelven a abrir al iniciar sesión (que se abrieron al cerrar).
Brecht Machiels
44
Esta respuesta funcionó para mí. Específicamente, para acceder al ejecutable administrado por Brew, tuve que sudo launchctl config user path /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbinreiniciar.
JP
Esta es la mejor respuesta aquí para agregar / usr / local / bin para aplicaciones basadas en Homebrew. Amigos por favor voten esta respuesta! Funciona en 10.11 y 10.12 también (no probado en 10.13 yo mismo). No es necesario meterse con environment.plisten la mayoría de los casos.
Mark Edington
esto funcionó para mí, mientras que la respuesta aceptada no lo hizo
MichaelChirico
11

En Mountain Lion todo el /etc/pathsy /etc/launchd.confla edición no tiene ningún efecto!

Los foros de desarrolladores de Apple dicen:

"Cambie el Info.plist del .app para que contenga un diccionario" LSEnvironment "con las variables de entorno que desee.

~ / .MacOSX / environment.plist ya no es compatible ".

Así que Info.plistedité directamente la aplicación (haga clic derecho en "AppName.app" (en este caso SourceTree) y luego " Show package contents")

Mostrar el contenido del paquete

y agregó un nuevo par clave / dict llamado:

<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>

(ver: LaunchServicesKeys Documentation en Apple )

ingrese la descripción de la imagen aquí

ahora la aplicación (en mi caso SourceTree) usa la ruta dada y funciona con git 1.9.3 :-)

PD: Por supuesto, debe ajustar la entrada de ruta a sus necesidades de ruta específicas.

Flori
fuente
¿Es esto cierto? Veo muchas publicaciones con información contradictoria, algunas de las cuales son claramente antiguas, pero algunas parecen recientes. Ni siquiera tengo (en 10.8.2) un de /etc/launchd.conftodos modos. Es de suponer que, incluso si las normas no establecen que las aplicaciones deben utilizar sus archivos Info.plist de caminos, aún podrían estar utilizando otros archivos - /etc/launchd.conf, /etc/paths/o /etc/paths.d/*, o '~ / .MacOSX / environment.plist. ¿Es seguro decir que, en la práctica , las rutas para aplicaciones GUI en Mountain Lion podrían establecerse en cualquiera de estos archivos?
orome
2
Este Info.plist fue lo único que funcionó para mí, después de probar lauchd.conf, etc / paths, etc. con mis Maverics y eclipse. En realidad, esto tampoco funcionó de inmediato, debe recordar dos cosas: 1. ejecutar /System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -v -f /Applications/eclipse/Eclipse.appcomo se indica en otra respuesta, después de cambiar plist y 2. agregar la ruta completa allí, no puede usar la RUTA existente como en sus scripts de perfil.
JaakL
Esto funciona en Sierra (10.12). Pero aún es necesario ejecutar el lsregistercomando, como lo señaló @JaakL.
Alastair Harrison
1

En Mountain Lion (10.8.4), $PATHse trata especialmente de alguna manera. launchctl setenv PATH /your/path:/hereno tiene ningún efecto en las $PATHinstancias en Terminal.app o Emacs.app que se inician posteriormente desde el Dock o desde el Finder (aunque launchctl setenv SPONG foofunciona bien). Tampoco $HOME/.launchd.conffunciona. /etc/launchd.confes la única forma en que he encontrado para configurar la RUTA correctamente en todas partes. Desafortunadamente, uno no puede usar envars como $HOMEallí, por lo que todos los usuarios de mi computadora portátil tienen /Users/nb/binsu $PATH. Solo soy yo, así que no me importa.

Nick Barnes
fuente
Debería encontrar que el proceso de Terminal recoge el PATHvalor que estableció, pero: cuando crea una nueva terminal, inicia un shell de inicio de sesión, que, si está utilizando bash, se ejecuta /etc/profile, que se inicializa PATHal valor devuelto /usr/libexec/path_helper. Si elige Shell> Nuevo comando ... y ejecuta env(no en un shell), debería encontrar que ese PATHes el valor que establece a través de launchd.
Chris Page
-1

Intente configurar la ruta en su ~ / .profile o ~ / .bash_profile o ~ / .zprofile (para zsh). Esto funcionó para mí con VimR: no estaba leyendo la RUTA cuando se lanzó desde el muelle, pero funcionó cuando se lanzó desde la terminal. Por cierto, estaba ejecutando OSX 10.11.

No tengo un buen manejo de esto para darle una gran explicación de por qué funciona, hay muchas explicaciones en línea sobre los diferentes archivos de configuración y lo que hacen: https://stackoverflow.com/questions/415403/ cuál es la diferencia entre bashrc-bash-profile-and-environment

Además, vea una discusión similar aquí: https://stackoverflow.com/questions/3344704/path-variable-not-properly-set-in-gvim-macvim-when-it-is-opened-from-the-finder/ 24542893 # 24542893

adampasz
fuente
La pregunta pregunta cómo hacerlo para las aplicaciones lanzadas desde Doc, que es lo mismo que el lanzamiento desde Finder, para el cual usted dice que su respuesta no funciona, y podemos explicar exactamente por qué funciona / no funciona
usuario151019
-3

En Mac OS X 10.8.4, Mountain Lion, el entorno de ruta incorpora las rutas enumeradas en este archivo:

/etc/paths

Puede editar este archivo utilizando una herramienta de línea de comandos, como vimel siguiente comando:

sudo vim /etc/paths
usuario1814739
fuente