Cómo configurar PATH para aplicaciones iniciadas por Finder

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

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

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

¿Está seguro de que su solución aceptada funciona en 10.8?
@SorinSbarnea (sé que esto es antiguo, pero) puedo verificar que la respuesta actualmente aceptada funciona para mí en OS X 10.8.3, cuando también uso el truco de reinicio de base sugerido . (Sin embargo, estoy configurando una variable de entorno diferente, no $PATHen caso de que eso importe).
consulte también < stackoverflow.com/questions/829749/… >. Es prácticamente un duplicado.

Respuestas (8)

Si está en 10.7 y no en 10.8, la siguiente solución funciona bien:

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

export PATH=some_path:another_path
launchctl setenv PATH $PATH

En caso de que quiera dejar intacta la ruta original, 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: El cambio de la RUTA de launchctl no surtirá efecto hasta que se "reinicie" el Dock. Un nuevo proceso Dock se iniciará automáticamente después de que el actual se elimine con el comando:

killall Dock
Terminé usando: "launchctl setenv PATH $PATH". Agregar la ruta de lanzamiento existente a través de "$p" termina repitiendo la ruta cada vez que abre un shell.
También vale la pena señalar: hasta que haya iniciado un shell (a través de la Terminal), launchctl tendrá la ruta predeterminada y la ruta personalizada no estará disponible. Esto me volvió un poco loco tratando de depurar las cosas hasta que descubrí lo que estaba pasando. Si inicié Intellij antes de abrir un shell, la ruta sería incorrecta. Parece que la solución real aquí es configurar launchctl en todo el sistema, y ​​no a través del shell de inicio de sesión de algún usuario.
Esto no funciona en OS X 10.8 - probé con Eclipse e IntelliJ - ejecutar set|grep PATHdesde ellos siempre regresaráPATH=/usr/bin:/bin:/usr/sbin:/sbin
Todavía me funciona en OS X 10.8 con eclipse, así que no sé qué estás haciendo mal.
Tampoco funciona para mi (10.8.1)
¿Y ha configurado su IDE como mi segunda respuesta? Hasta ahora no he tenido ningún problema con ninguna de las versiones 10.8 (10.8.0, 10.8.1 y 10.8.2), y utilizo la configuración que he descrito.
Puede intentar reiniciar el puerto después de ejecutar launchctl: osascript -e 'tell app "Dock" to quit'. Eso pareció arreglarlo para mí.
No funcionó para mí en 10.9 incluso después de decirle a Dock que se reiniciara. Editar /etc/launchd.conf y reiniciar funcionó para mí. serverfault.com/questions/16355/how-to-set-global-path-on-os-x/…
Solo puedo hablar por mí mismo, pero lo descrito todavía funciona para mí en 10.9, y también funciona en el próximo 10.10
launchctl setenv PATH no funciona para mí en 10.10.4, con o sin reiniciar el muelle. Curiosamente, launchctl getenv PATH está vacío antes de configurarlo.
¡Estupendo! Funciona a las mil maravillas en OS X 10.9.5 :)
Esto funciona para mí en 10.12, pero solo como una excepción. Después de reiniciar la máquina, los efectos se pierden.
@ Dover8 Veo lo mismo en 10.12.3. Esta respuesta funciona, pero después de reiniciar, la solución se interrumpe.
Creo que necesitan ejecutar los comandos nuevamente (idealmente automáticamente) después de reiniciar para que continúe funcionando.
esto no funciona para mí en absoluto en 10.11.6

En OS X 10.10 Yosemite, usé 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 surtan efecto.

Debe reiniciar todas las aplicaciones para que esto tenga efecto. (No se aplica a las aplicaciones que se vuelven a abrir al iniciar sesión después de reiniciar). (Gracias @Brecht Machiels).

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 estaban abiertas cuando se apagaron).
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.
Esta es la mejor respuesta aquí para agregar /usr/local/bin para aplicaciones basadas en Homebrew. ¡Amigos, por favor voten esta respuesta! También funciona en 10.11 y 10.12 (no probado en 10.13 yo mismo). No hay necesidad de meterse con environment.plisten la mayoría de los casos.
esto funcionó para mí mientras que la respuesta aceptada no
Esta publicación explica cómo revertir esta configuración o establecer los valores predeterminados del sistema launchctl.
Confirmado para trabajar en macOS 10.15 Catalina.

Para responder a su pregunta sobre 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.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.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 el Info.plist de Eclipse.app ha cambiado. Por lo tanto, debe forzar la actualización de la base de datos de LaunchService en la Terminal utilizando lsregister command:

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

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

+1 por 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.
Todavía trabaja en Big Sur, para que conste.

¡ En Mountain Lion toda la edición /etc/pathsno /etc/launchd.conftiene ningún efecto!

Los foros de desarrolladores de Apple dicen:

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

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

Así que edité directamente la aplicación Info.plist(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: Documentación de LaunchServicesKeys 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 específicas de ruta.

¿Es esto cierto? Veo muchas publicaciones con información contradictoria, algunas de las cuales son claramente antiguas, pero otras parecen recientes. Ni siquiera tengo (en 10.8.2) un de /etc/launchd.conftodos modos. Presuntamente, incluso si las reglas no establecen que las aplicaciones deben usar sus archivos Info.plist para las rutas, aún podrían estar usando otros archivos: /etc/launchd.conf, /etc/paths/o /etc/paths.d/*, o `~/.MacOSX/environment.plist. ¿Es seguro decir entonces que, en la práctica , las rutas para las aplicaciones GUI en Mountain Lion podrían configurarse en cualquiera de estos archivos?
Este Info.plist fue lo único que funcionó para mí, después de probar lauchd.conf, etc/paths, etc. con mi 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 los scripts de su perfil.
Esto funciona en Sierra (10.12). Pero aún es necesario ejecutar el lsregistercomando, como lo señaló @JaakL.

En Mountain Lion (10.8.4), $PATHse trata de alguna manera de forma especial. launchctl setenv PATH /your/path:/hereno tiene ningún efecto en las $PATHinstancias de Terminal.app o Emacs.app lanzadas posteriormente desde el Dock o desde el Finder (mientras que launchctl setenv SPONG foofunciona bien). Tampoco $HOME/.launchd.conffunciona. /etc/launchd.confes la única forma que he encontrado para configurar PATH 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/binen sus archivos $PATH. Solo soy yo, así que no me importa.

Debería encontrar que el proceso de la Terminal toma el PATHvalor que estableció, pero: cuando crea una nueva terminal, inicia un shell de inicio de sesión que, si está usando bash, ejecuta /etc/profile, que se inicializa PATHcon el valor devuelto por /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 estableció a través de launchd.

Inspirado por la respuesta de @brki, escribí este guión. Toma el contenido de /etc/pathsy lo usa para reconstruir la ruta original (y /usr/local/bin), luego le agrega ~/biny /some/other.

if [ -f /etc/paths ]; then
  ETC_PATHS=$(while read line; do
    echo -n "${line}:"
  done < /etc/paths)
  PATH_OVERRIDE=${ETC_PATHS}${HOME}/bin:/some/other
  echo "overriding original path /usr/bin:/bin:/usr/sbin:/sbin with ${PATH_OVERRIDE} so that gpg and node will be on path for spotlight launched programs"
  sudo launchctl config user path $PATH_OVERRIDE
fi

He comprobado que esto funciona en macOS Catalina 10.15.1

Intente configurar la ruta en su ~/.profile o ~/.bash_profile o ~/.zprofile (para zsh). Esto funcionó para mí con VimR: no leía la RUTA cuando se iniciaba desde el puerto, pero funcionaba cuando se iniciaba 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-perfil-y-entorno

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

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

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 usando una herramienta de línea de comando, como vimusar el siguiente comando:

sudo vim /etc/paths