No Mountain Lion, como defino, em um só lugar, a variável de ambiente PATH para todos os aplicativos recém-lançados?

9

No Ask Different, há muitas perguntas sobre a PATHvariável de ambiente e como configurá-lo para aplicativos iniciados por um shell, por holofotes ou por meio do localizador (perguntas comuns: Como definir o PATH para aplicativos iniciados pelo Finder ou Como alterar a variável de ambiente do PATH. .. )

As respostas variam de shscripts de inicialização a /etc/pathsaté /etc/launchd.conf. Aqui está a resposta para uma configuração unificada de PATHtodos os aplicativos no Mac OS X Mountain Lion 10.8.2.

halloleo
fonte

Respostas:

14

Depois de muitos testes com diferentes opções, concluo:

Existe uma maneira unificada de definir os PATHaplicativos iniciados por diferentes meios (como shell script, Finder e Spotlight)? Bem, sim e não:

  • Não : a configuração de PATHscripts de inicialização do shell (por exemplo .bashrc) funciona apenas para aplicativos iniciados por shells.
  • Não : a configuração PATHdo launchdprocesso atual via launchctl setenv PATH <...>não funciona para mim.
  • Sim : Configuração PATHem /etc/launchd.conf(e reiniciar o sistema) fará com que o apropriado PATHvisível em aplicações lançadas pelo Spotlight, Dock e Finder e, posteriormente, conchas (locais).
  • Não : os shells invocados remotamente não herdam o ambiente. (Veja ... por que shells remotos via ssh NÃO herdam o ambiente .. )

Notas para a instalação de conchas:

  1. Para o correto funcionamento de shells locais , é importante desativar o uso de /usr/libexec/path_helper, porque os caminhos padrão /etc/pathspodem mudar a ordem dos caminhos em PATH**.

  2. Para acomodar shells remotos, é necessário reimportar o launchdambiente para o shell. Use algo como isso em seu .bashrc:

# the vexatious path stuff
eval $(launchctl export)

As conseqüências infelizes de toda a questão são:

  • Não há como ter essas configurações unificadas por usuário. ( ~/.launchd.confnão funciona.)
  • Não é uma maneira fácil de construir o PATH a partir de diferentes fontes, usando técnicas como a expansão do diretório inicial et al.
halloleo
fonte
Update: definição do caminho via /etc/launch.confque não trabalham para os reservatórios registrado em remotamente via ssh (eu assumo porque a sshdnão passar seu ambiente ele herda de seu pai launchdpara o shell filho.). - Editarei a resposta de acordo.
halloleo
Resposta atualizada com uma solução para shells remotos.
Halloleo 18/04
1
Ótima resposta; Você pode simplificar terceirização do ambiente launchd da seguinte forma: eval "$(launchctl export)".
mklement0
Uma maneira fácil de editar /etc/launchd.confé apenas executar sudo -e /etc/launchd.conf(se você estiver familiarizado com o vi) ou EDITOR=nano sudo -e /etc/launchd.conf(se você preferir um editor não modal).
nohillside
3

Expandindo a resposta anterior , para alterar o caminho /etc/launchd.conf, faça o seguinte.

  1. Verifique se você possui privilégios de administrador.

  2. Crie um novo arquivo de texto com o seguinte conteúdo, modificado para atender às suas necessidades:

    setenv PATH /usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/Users/YourUserName/bin
    
  3. Salve-o em seu diretório pessoal como launchd.conf.

  4. Abra Terminal.app (ou seu substituto favorito) e digite:

    sudo mv ~/launchd.conf /etc

    Dependendo do uso anterior do sudocomando, você poderá receber uma mensagem curta "tenha cuidado ao fazer o que está fazendo", mas, de qualquer forma, precisará digitar sua senha. Tudo o que o comando faz é mover o arquivo para o /etcdiretório, que não está diretamente acessível ao salvar um arquivo no TextEdit, por exemplo. sudo(abreviação de "Superusuário DO") é usada porque são necessários privilégios de administrador para gravar nesse diretório.

  5. Reinicie o computador.

E você deve estar tudo pronto. Boa sorte!

MattDMo
fonte
Obrigado pelos detalhes, mas a questão não era sobre maneiras de modificar launchd.conf, mas sobre como todos os aplicativos obtêm a mesma variável PATH de maneira unificada.
Halloleo 6/08
Certo, mas eu originalmente procurou a pergunta tentando descobrir como definir o PATHpara as minhas aplicações GUI, e eu percebi que eu iria ajudar qualquer almas pobres pode não saber como efetuar a mudança ...
MattDMo
Você tem um ponto válido aqui; Ainda assim, acho que integrar sua informação na resposta é a melhor opção. - Acho que este comentário fio torna-se uma discussão meta, então eu abri-lo em meta.stackoverflow como O que fazer com uma resposta adicional ...
halloleo
1
na verdade, isso não deveria estar no meta.apple.stackexchange.com?
precisa saber é o seguinte
De fato, meta.apple.stackexchange.com teria sido o lugar correto. Eu só não sabia que ela existe ...
halloleo
-2

Você pode tentar https://github.com/ersiner/osx-env-sync .

Ele lida com aplicativos de linha de comando e GUI de uma única fonte . E funciona com a versão mais recente do OS X (Yosemite).

Ersin Er
fonte
O que apenas automatiza a outra resposta usando o bit que ele diz que não funciona, por exemplo, launchctl setenv PATH <...>
user151019
@ Mark Isso não tem nada a ver com a automatização das etapas de uma resposta aqui. Este usa um agente de inicialização. Eu sugiro que você tente.
Ersin Er
A solução aceita também usa o launchdsistema. Sua solução tem os mesmos problemas que os indicados na resposta aceita.
Halloleo 15/09/2015
@halloleo Você já tentou? E em qual versão do OS X?
Ersin Er