Como definir o PATH para aplicativos iniciados pelo Finder

66

Aplicativos lançados via Finder parecem não respeitar o PATH como definido em .bash_profile. Então, quando eu tento executar o código de um IDE (Intellij) não tenho mais acesso a programas em /usr/local/bin, que normalmente é adicionado ao meu caminho no Terminal.

Pelo visto .MacOSX/environment.plist costumava ser o caminho para fazer isso, mas não funciona mais no Lion.

Como posso definir o PATH para aplicativos lançados pelo Finder?

Caffeine Coma
fonte
Você tem certeza de que sua solução aceita funciona em 10.8?
sorin
1
@SorinSbarnea (Eu sei que isso é antigo, mas) eu posso verificar isso a resposta atualmente aceita funciona para mim no OS X 10.8.3, quando eu também uso o sugestão de reinício da doca . (Estou definindo uma variável de ambiente diferente, não $PATH no caso que importa.
Calrion
veja também & lt; stackoverflow.com/questions/829749/… & gt; É praticamente uma duplicata.
Philipp Kunz

Respostas:

35

Se você estiver no 10.7 e não no 10.8, a solução abaixo funciona bem:

Eu tive o mesmo problema com o eclipse, mas agora eu adicionei e. o seguinte para o meu .bash_profile e então funcionou.

export PATH=some_path:another_path
launchctl setenv PATH $PATH

Caso você queira deixar o caminho original intacto

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

em vez disso (ou apenas launchctl setenv PATH /my/new/path:$(launchctl getenv PATH) ).

Nota: Alterar o PATH launchctl não terá efeito até que o Dock seja "reiniciado". Um novo processo do Dock será iniciado automaticamente após o atual ser eliminado com o comando:

killall Dock
Rene Larsen
fonte
1
Acabei usando: "launchctl setenv PATH $ PATH". Anexar o caminho launchctl existente através de "$ p" acaba repetindo o caminho toda vez que você abrir um shell.
Caffeine Coma
4
este não funciona no OS X 10.8 - tentei com Eclipse e IntelliJ - rodando set|grep PATH deles retornará sempre PATH=/usr/bin:/bin:/usr/sbin:/sbin
sorin
1
Não funciona para o meu quer (10.8.1)
nohillside
4
Você pode tentar reiniciar o dock após executar launchctl: osascript -e 'tell app "Dock" to quit'. Isso pareceu consertar isso para mim.
Ivan Andrus
2
Isso funciona para mim em 10.12, mas apenas como um. Depois de reiniciar a máquina, os efeitos são perdidos.
Dover8
19

Para responder a sua pergunta ao seu "novo" problema, decidi escrever outra resposta - porque é mais fácil explicar com amostras.

Uma maneira de carregar as variáveis ​​de ambiente na inicialização de sua ferramenta (IDE) de sua escolha é como ela pode ser feita com o eclipse - acho que deve haver uma estrutura semelhante em sua ferramenta (IDE) também.

Como isso pode ser feito no eclipse - https://stackoverflow.com/questions/829749/launch-mac-eclipse-with-environment-variables-set

(ligeiramente reescrito sobre as variáveis ​​de ambiente)

Crie um arquivo de texto vazio chamado "eclipse.sh" no diretório do pacote de aplicativos do Eclipse /Applications/eclipse/Eclipse.app/Contents/MacOS

Abra o eclipse.sh em um editor de texto e insira o seguinte conteúdo:

#!/bin/sh

. ~/.bash_profile

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

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

No Terminal, defina o sinalizador de executável do script de shell eclipse.sh, por exemplo:

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

Abra o Eclipse.app Info.plist e altere o valor da chave CFBundleExecutable de eclipse para eclipse.sh.

O MacOS X não detecta automaticamente que o Info.plist do Eclipse.app foi alterado. Portanto, você precisa forçar a atualização do banco de dados LaunchService no Terminal usando o comando lsregister:

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

Na próxima vez que você iniciar o Eclipse.app a partir do Dock ou do Finder, as variáveis ​​de ambiente deverão ser configuradas.

Rene Larsen
fonte
+1 para uma explicação clara e precisa, e para o fato de que, mais de seis anos depois, isso ainda funciona com High Sierra, 10.13.x.
dgnuff
11

No OS X 10.10 Yosemite, usei este comando:

sudo launchctl config user path <my path setting>

Esteja ciente de que ele define o PATH de lançamento para todos os usuários . Isso funcionou bem para o meu caso de uso. Note que você será solicitado a reiniciar a sua máquina para que os efeitos se instalem.

brki
fonte
Isso não parece ter um efeito na variável de ambiente PATH de aplicativos que são reabertos no login (que estavam abertos ao serem encerrados).
Brecht Machiels
2
Essa resposta funcionou para mim. Especificamente, para acessar o executável gerenciado pelo Brew, eu tive que sudo launchctl config user path /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin e reinicie.
J P
Esta é a melhor resposta aqui para adicionar / usr / local / bin para aplicativos baseados em Homebrew. Gente, por favor vote esta resposta! Ele funciona em 10.11 e 10.12 também (não testado em 10.13 eu mesmo). Não precisa mexer environment.plist na maioria dos casos.
Mark Edington
isso funcionou para mim, enquanto a resposta aceita não
MichaelChirico
10

Em Mountain Lion todo o /etc/paths e /etc/launchd.conf edição não tem efeito algum!

Fóruns de desenvolvimento da Apple dizem:

"Altere o Info.plist do próprio .app para conter um" LSEnvironment "   dicionário com as variáveis ​​de ambiente que você deseja.

~ / .MacOSX / environment.plist não é mais suportado. "

Então eu editei diretamente o aplicativo Info.plist (clique com o botão direito em "AppName.app" (neste caso, SourceTree) e depois " Show package contents ")

Show Package Contents

e adicionou um novo par chave / dict chamado:

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

(Vejo: Documentação LaunchServicesKeys na Apple )

enter image description here

agora o App (no meu caso SourceTree) usa o caminho dado e funciona com o git 1.9.3 :-)

PS: Claro que você tem que ajustar a entrada do caminho para suas necessidades específicas de caminho.

Flori
fonte
Isso é verdade? Eu vejo muitos posts com informações contraditórias, algumas das quais são claramente antigas, mas algumas parecem recentes. Eu nem tenho (no 10.8.2) um /etc/launchd.conf de qualquer forma. Presumivelmente, mesmo que as regras não digam que os aplicativos devemos usar seus arquivos Info.plist para caminhos, eles ainda poderiam estar usando outros arquivos - /etc/launchd.conf, /etc/paths/ou /etc/paths.d/*ou `~ / .MacOSX / environment.plist. É seguro dizer então que, na prática , caminhos para aplicativos de GUI no Mountain Lion podem ser definidos em qualquer um desses arquivos?
orome
1
Este Info.plist foi a única coisa que funcionou para mim, depois de tentar lauchd.conf, etc / paths etc com o meu Maverics e eclipse. Na verdade isso não funcionou imediatamente também, você precisa se lembrar de duas coisas: 1. executar /System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -v -f /Applications/eclipse/Eclipse.app como dado em outra resposta, depois de mudar plist e 2. add caminho completo lá, você não pode usar o PATH existente como nos seus scripts de perfil.
JaakL
Isso funciona na Sierra (10.12). Mas ainda é necessário executar o lsregister comando, conforme observado por @JaakL.
Alastair Harrison
1

No leão da montanha (10.8.4), $PATH é tratado especialmente de alguma forma. launchctl setenv PATH /your/path:/here não tem qualquer efeito sobre o $PATH em instâncias Terminal.app ou Emacs.app posteriormente lançadas a partir do Dock ou do Finder (enquanto launchctl setenv SPONG foo funciona bem). Além disso $HOME/.launchd.conf não funciona. /etc/launchd.conf é a única maneira que encontrei para definir o PATH corretamente em todos os lugares. Infelizmente, não é possível usar os envars como $HOME lá, então todos os usuários do meu laptop /Users/nb/bin em seus $PATH. Isso é só eu, então eu não me importo.

Nick Barnes
fonte
Você deve achar que o processo do Terminal pega o PATH valor que você define, mas: quando você cria um novo terminal, ele inicia um shell de login, que - se você estiver usando o bash - executa /etc/profile, que inicializa PATH para o valor retornado de /usr/libexec/path_helper. Se você escolher Shell & gt; Novo Comando ... e corra env (não em uma concha) você deve achar isso PATH é o valor que você define via launchd.
Chris Page
-1

Tente definir o caminho em seu ~ / .profile ou ~ / .bash_profile ou ~ / .zprofile (para zsh). Isso funcionou para mim com o VimR - ele não estava lendo o PATH quando lançado do dock, mas funcionava quando era lançado do terminal. Eu estava correndo no OSX 10.11 pelo caminho.

Eu não tenho um bom controle sobre isso para dar uma boa explicação do porque funciona, há muitas explicações on-line sobre os diferentes arquivos de configuração e o que eles fazem: https://stackoverflow.com/questions/415403/whats-the-difference-between-bashrc-bash-profile-and-ambiente

Além disso, veja uma discussão semelhante aqui: https://stackoverflow.com/questions/3344704/path-variable-not-properly-set-in-gvim-macvim-when-it-is-opened-from-the-finder/24542893#24542893

adampasz
fonte
A pergunta pergunta como fazer isso para aplicativos lançados do Doc, que é o mesmo que o lançamento do Finder, para o qual você diz que sua resposta não funciona - e podemos explicar exatamente por que funciona / não funciona
Mark
-3

No Mac OS X 10.8.4, Mountain Lion, o ambiente de caminho incorpora os caminhos listados neste arquivo:

/etc/paths

Você pode editar este arquivo usando uma ferramenta de linha de comando, como vim usando o seguinte comando:

sudo vim /etc/paths
user1814739
fonte