Pergunta

Update: O link abaixo não tem uma resposta completa . Ter que definir o caminho ou variável em dois lugares (um para GUI e um para shell) é coxo.

não duplicar de : Definir variáveis ??de ambiente no OS X ?


Vindo de um fundo do Windows, onde é muito fácil de configurar e modificar variáveis ??de ambiente (basta ir a Propriedades do Sistema> Avançado> Variáveis ??de Ambiente), não parece ser a de que a frente no Mac OS 10.5. A maioria das referências dizem que eu deveria atualizar / etc / profile ou ~ / .profile. São aqueles o equivalente de Variáveis ??do sistema e variáveis ??de usuário? Por exemplo, onde eu devo definir minha variável JAVA_HOME?


EDIT:

Eu quero ser capaz de acessar a variável a partir do terminal, bem como um aplicativo como o Eclipse. Além disso, eu espero não ter de reiniciar / logout para fazer este efeito take.

Foi útil?

Solução

Não há necessidade de duplicação. Você pode definir variáveis ??de ambiente utilizadas pelo launchd (e filho processos, ou seja, qualquer coisa que você começar do Spotlight) usando launchctl setenv.

Por exemplo, se você deseja espelhar o seu caminho atual no launchd depois de configurá-lo em .bashrc ou onde quer que:

PATH=whatever:you:want
launchctl setenv PATH $PATH

As variáveis ??de ambiente não são atualizados automaticamente na execução de aplicações. Você vai precisar para relançar aplicativos para obter as variáveis ??de ambiente atualizadas (embora você pode apenas definir variáveis ??em seu shell, por exemplo PATH=whatever:you:want, não há nenhuma necessidade de relançar o terminal).

Outras dicas

Há vários lugares onde você pode definir variáveis ??de ambiente.

  • ~/.profile:. Usar isso para variáveis ??que você deseja conjunto em todos os programas lançados a partir do terminal (note que, ao contrário no Linux, todas as conchas abertas em Terminal.app são shells de login)
  • ~/.bashrc: este é invocado para os reservatórios que não são Identifique conchas. Use este para aliases e outras coisas que precisam ser redefinidos em subshells, não para variáveis ??de ambiente que são herdadas.
  • /etc/profile: este é carregado antes ~ / profile, mas é de outro modo equivalente. Usá-lo quando quiser a variável para aplicar a programas de terminal lançados por todos os usuários na máquina (assumindo que eles usam bash).
  • ~/.MacOSX/environment.plist: este é lido por loginwindow no login. Ela se aplica a todos os aplicativos, inclusive GUI, exceto aqueles lançado pelo Spotlight em 10,5 (não 10,6). Ela exige que você sair e login novamente para que as alterações tenham efeito. Este arquivo não é mais suportado a partir do OS X 10.8.
  • instância launchd de seu usuário: isso se aplica a todos os programas lançados pelo usuário, GUI e CLI. Você pode aplicar as alterações a qualquer momento usando o comando setenv em launchctl. Em teoria , você deve ser capaz de colocar comandos setenv em ~/.launchd.conf e launchd iria lê-los automaticamente quando o usuário faz login, mas na prática apoio para esse arquivo nunca foi implementado. Em vez disso, você pode usar outro mecanismo para executar um script no início da sessão, e têm que launchctl chamada de script para configurar o ambiente launchd.
  • /etc/launchd.conf: este é lido por launchd quando o sistema é iniciado e quando um usuário se conecta Eles afetam cada processo no sistema, porque launchd é o processo raiz.. Para aplicar as alterações à raiz correndo launchd você pode canalizar os comandos em sudo launchctl.

As coisas fundamentais para entender são:

  • variáveis ??de ambiente são herdadas por filhos de um processo no momento em que são bifurcada.
  • o processo de raiz é um exemplo launchd, e há também uma instância launchd separado por sessão de usuário.
  • launchd permite alterar suas atuais variáveis ??de ambiente usando launchctl; as variáveis ??atualizados são herdadas por todos os novos processos que Forks a partir de então.

Exemplo de definindo uma variável de ambiente com launchd:

echo setenv REPLACE_WITH_VAR REPLACE_WITH_VALUE | launchctl

Agora, lançar seu aplicativo GUI que usa a variável, e voila!

Para contornar o fato de que ~/.launchd.conf não funciona, você pode colocar o seguinte script no ~/Library/LaunchAgents/local.launchd.conf.plist:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>Label</key>
  <string>local.launchd.conf</string>
  <key>ProgramArguments</key>
  <array>
    <string>sh</string>
    <string>-c</string>
    <string>launchctl &lt; ~/.launchd.conf</string>    
  </array>
  <key>RunAtLoad</key>
  <true/>
</dict>
</plist>

Então você pode colocar setenv REPLACE_WITH_VAR REPLACE_WITH_VALUE dentro ~/.launchd.conf, e ele será executado em cada login.

Note que, quando tubulação de uma lista de comandos em launchctl desta forma, você não será capaz de variáveis ??de ambiente definidas com valores contendo espaços. Se você precisar fazer isso, você pode chamar launchctl da seguinte forma:. launchctl setenv MYVARIABLE "QUOTE THE STRING"

Além disso, nota que outros programas que são executados no início da sessão pode executar antes do launchagent, e, portanto, não pode ver as variáveis ??de ambiente que cria.

Eu acho que o OP está procurando é um simples, parecido com o Windows solução.

aqui vamos nós:

https://www.macupdate.com/app/mac/14617/rcenvironment

Você pode ler-se no Linux, que é bastante perto do que Mac OS X é. Ou você pode ler-se no BSD Unix, que é um pouco mais perto. Para a maior parte, as diferenças entre Linux e BSD não importa muito.

/etc/profile são variáveis ??de ambiente do sistema.

~/.profile são variáveis ??de ambiente específicas do usuário.

"onde eu devo definir minha variável JAVA_HOME?"

  • Você tem vários usuários? Será que eles se importam? Será que você mexe algum outro usuário se alterando uma /etc/profile?

Geralmente, prefiro não mexer com as configurações de todo o sistema, mesmo que eu sou o único usuário. Eu prefiro editar minhas configurações locais.

Para aplicações GUI, você terá que criar e editar ~/.MacOSX/environment.plist. Mais detalhes aqui . Você vai precisar para terminar a sessão para que estes entrem em vigor. Eu não tenho certeza se eles também afetam os aplicativos lançados a partir do Terminal, mas presumo que seria.

Para aplicativos lançados a partir do Terminal, você também pode editar o / .profile ~.

Basta abrir o arquivo ~/.profile, via nano no Terminal e digite lá:

export PATH=whatever/you/want:$PATH

Salve este arquivo (cmd + X e Y). Depois disso, por favor o logout / login novamente ou basta abrir uma nova guia no Terminal e tentar usar a sua nova variável.

Por favor não esqueça de adicionar ": $ PATH". Depois de tudo o que / você / quiser, caso contrário você vai apagar todos os caminhos na variável PATH, que estavam lá antes que

variáveis ??de ambiente Sincronizar OS X para linha de comando e aplicações GUI de uma única fonte com OSX-env-sync .

Eu também postou uma resposta para uma pergunta relacionada aqui .

Se você quiser variáveis ??de ambiente alterar permanentemente no MacOS, colocá-las em /etc/paths. Nota , este arquivo é somente leitura por padrão, então você vai ter que chmod permissões de escrita.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top