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 PATH
aplicaciones iniciadas por Finder?
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_profile
y 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
set|grep PATH
desde ellos siempre regresaráPATH=/usr/bin:/bin:/usr/sbin:/sbin
launchctl
: osascript -e 'tell app "Dock" to quit'
. Eso pareció arreglarlo para mí.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).
sudo launchctl config user path /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
reiniciar.environment.plist
en la mayoría de los casos.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.
¡ En Mountain Lion toda la edición /etc/paths
no /etc/launchd.conf
tiene 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
")
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 )
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.
/etc/launchd.conf
todos 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?/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -v -f /Applications/eclipse/Eclipse.app
como 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.lsregister
comando, como lo señaló @JaakL.En Mountain Lion (10.8.4), $PATH
se trata de alguna manera de forma especial. launchctl setenv PATH /your/path:/here
no tiene ningún efecto en las $PATH
instancias de Terminal.app o Emacs.app lanzadas posteriormente desde el Dock o desde el Finder (mientras que launchctl setenv SPONG foo
funciona bien). Tampoco $HOME/.launchd.conf
funciona. /etc/launchd.conf
es la única forma que he encontrado para configurar PATH correctamente en todas partes. Desafortunadamente, uno no puede usar envars como $HOME
allí, por lo que todos los usuarios de mi computadora portátil tienen /Users/nb/bin
en sus archivos $PATH
. Solo soy yo, así que no me importa.
PATH
valor 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 PATH
con 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 PATH
es el valor que estableció a través de launchd.Inspirado por la respuesta de @brki, escribí este guión. Toma el contenido de /etc/paths
y lo usa para reconstruir la ruta original (y /usr/local/bin
), luego le agrega ~/bin
y /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
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 vim
usar el siguiente comando:
sudo vim /etc/paths
sorín
Calrión
$PATH
en caso de que eso importe).Felipe Kunz