Qual é a maneira correta de modificar variáveis de ambiente como PATH no OS X?
Procurei um pouco no Google e encontrei três arquivos diferentes para editar:
- / etc / caminhos
- ~ / .profile
- ~ / .tcshrc
Eu nem tenho alguns desses arquivos e tenho certeza de que .tcshrc está errado, pois o OS X usa o bash agora. Onde estão definidas essas variáveis, especialmente PATH?
Estou executando o OS X v10.5 (Leopard).
macos
bash
path
environment-variables
Paul Wicks
fonte
fonte
env "switch.1.disabled=true" open -n /Applications/Eclipse.app/
para iniciar o aplicativo GUI com um novo ambiente de sistema definido.Respostas:
Bruno está no caminho certo. Eu fiz uma extensa pesquisa e, se você deseja definir variáveis disponíveis em todos os aplicativos GUI, sua única opção é
/etc/launchd.conf
.Observe que environment.plist não funciona para aplicativos iniciados pelo Spotlight. Isso está documentado por Steve Sexton aqui .
Abra um prompt de terminal
Tipo
sudo vi /etc/launchd.conf
(nota: este arquivo ainda pode não existir)Coloque conteúdos como os seguintes no arquivo
Salve suas alterações no vi e reinicie o seu Mac. Ou use o comando
grep
/xargs
que é mostrado no comentário do código acima.Prove que suas variáveis estão funcionando, abrindo uma janela do Terminal e digitando
export
e você deverá ver suas novas variáveis. Eles também estarão disponíveis no IntelliJ IDEA e em outros aplicativos da GUI iniciados pelo Spotlight.fonte
launchd.conf
é uma maneira, mas precisa de uma reinicialização (para reiniciar o launchd). Se você quer evitar uma reinicialização, veja a minha resposta stackoverflow.com/questions/135688/...Como definir o ambiente para novos processos iniciados pelo Spotlight (sem a necessidade de reinicialização)
Você pode definir o ambiente usado pelo launchd (e, por extensão, qualquer coisa iniciada no Spotlight) com
launchctl setenv
. Por exemplo, para definir o caminho:Ou se você deseja configurar seu caminho
.bashrc
ou algo semelhante, espelhe-o no launchd:Não há necessidade de reinicializar, mas você precisará reiniciar um aplicativo se desejar que ele recupere o ambiente alterado.
Isso inclui todos os shells já em execução no Terminal.app, embora, se você estiver lá, possa definir o ambiente mais diretamente, por exemplo, com
export PATH=/opt/local/bin:/opt/local/sbin:$PATH
para bash ou zsh.Como manter as alterações após uma reinicialização
Para manter as alterações após uma reinicialização, é possível definir as variáveis de ambiente
/etc/launchd.conf
, da seguinte maneira:launchd.conf
é executado automaticamente quando você reinicia.Se você deseja que essas alterações entrem em vigor agora, use este comando para reprocessar
launchctl.conf
(obrigado @mklement pela dica!)Você pode descobrir mais sobre
launchctl
e como ele carregalaunchd.conf
com o comandoman launchctl
.fonte
environment.plist
não acontece.etc/launchd.conf
antes de uma reinicialização seria usar a abordagem em resposta da @ MatthewMcCullough:egrep "^setenv\ " /etc/launchd.conf | xargs -t -L 1 launchctl
.Até e incluindo o OS X v10.7 (Lion), você pode configurá-los em:
Vejo:
Para PATH no Terminal, você deve poder configurá-lo
.bash_profile
ou.profile
(provavelmente precisará criá-lo)Para o OS X v10.8 (Mountain Lion) e além, você precisa usar
launchd
elaunchctl
.fonte
preferences.plist
era o ideal no OS X 10.5, pois na épocapreferences.plist
não havia sido lido para aplicativos iniciados pelo spotlight, consulte o comentário de Louis à resposta de Matthew e email.esm.psu.edu/pipermail/macosx-emacs/2010- /002113.html . Para o OS X 10.6,environment.plist
funciona exatamente como deveria.Solução para aplicativos de linha de comando e GUI de uma única fonte (funciona com o Mac OS X versão 10.10 (Yosemite) e o Mac OS X versão 10.11 (El Capitan))
Vamos supor que você tenha definições de variáveis de ambiente
~/.bash_profile
semelhantes no seguinte trecho:Precisamos de um agente de inicialização que seja executado em cada login e a qualquer momento, sob demanda, que carregará essas variáveis na sessão do usuário. Também precisaremos de um script de shell para analisar essas definições e criar os comandos necessários a serem executados pelo agente.
Crie um arquivo com
plist
sufixo (por exemplo, nomeadoosx-env-sync.plist
) no~/Library/LaunchAgents/
diretório com o seguinte conteúdo:-l
parâmetro é crítico aqui; é necessário executar o script de shell com um shell de logon, para que~/.bash_profile
seja originado em primeiro lugar antes da execução desse script.Agora, o script de shell. Crie-o
~/.osx-env-sync.sh
com o seguinte conteúdo:Verifique se o script do shell é executável:
Agora, carregue o agente de inicialização para a sessão atual:
(Re) Inicie um aplicativo GUI e verifique se ele pode ler as variáveis de ambiente.
A instalação é persistente. Ele sobreviverá a reinicializações e logins.
Após a configuração inicial (que você acabou de fazer), se desejar refletir
~/.bash_profile
novamente as alterações no seu ambiente inteiro,launchctl load ...
execute novamente o comando não executará o que você deseja; em vez disso, você receberá um aviso como o seguinte:<$HOME>/Library/LaunchAgents/osx-env-sync.plist: Operation already in progress
Para recarregar suas variáveis de ambiente sem passar pelo processo de logout / login, faça o seguinte:
Finalmente, certifique-se de reiniciar seus aplicativos já em execução (incluindo o Terminal.app) para torná-los cientes das alterações.
Também enviei o código e as explicações aqui para um projeto do GitHub: osx-env-sync .
Espero que essa seja a solução definitiva, pelo menos para as versões mais recentes do OS X (Yosemite e El Capitan).
fonte
Faz:
O arquivo pode não existir (se não, você pode apenas criá-lo).
Digite isso e salve o arquivo:
Corre
fonte
export
é o que eu ia sugerir, desde BASH não suportasetenv
Existem essencialmente dois problemas a serem resolvidos ao lidar com variáveis de ambiente no OS X. O primeiro é ao chamar programas do Spotlight (o ícone da lupa no lado direito do menu / barra de status do Mac) e o segundo ao chamar programas do Dock . Invocando programas a partir de um aplicativo Terminal / utilitário é trivial porque ele lê o ambiente dos locais de shell padrão (
~/.profile
,~/.bash_profile
,~/.bashrc
, etc.)Ao chamar programas do Dock, use
~/.MacOSX/environment.plist
onde o<dict>
elemento contém uma sequência de<key>KEY</key><string>theValue</string>
elementos.Ao chamar programas do Spotlight, verifique se o launchd foi configurado com todas as configurações de chave / valor necessárias.
Para resolver os dois problemas simultaneamente, eu uso um item de login (definido através da ferramenta Preferências do Sistema) na minha conta de usuário. O item de login é um script bash que chama uma função lismac do Emacs, embora é claro que é possível usar sua ferramenta de script favorita para realizar a mesma coisa. Essa abordagem tem o benefício adicional de que funciona a qualquer momento e não requer reinicialização, ou seja, é possível editar
~/.profile
, executar o item de login em algum shell e ter as alterações visíveis para programas recém-chamados, a partir do Dock ou do Spotlight.Detalhes:
Item de login:
~/bin/macosx-startup
Função lismac do Emacs:
~/lib/emacs/elisp/macosx/envionment-support.el
NOTA: Esta solução é uma amálgama daqueles que vieram antes de eu adicionar a minha, principalmente a oferecida por Matt Curtis, mas tentei deliberadamente manter minha
~/.bash_profile
plataforma de conteúdo independente e colocar a configuração dolaunchd
ambiente (um recurso exclusivo para Mac) em um script separado .fonte
Outra solução gratuita e de código aberto do Mac OS X v10.8 (Mountain Lion) / environment.plist é o EnvPane .
O código fonte do EnvPane disponível no GitHub . O EnvPane parece ter recursos comparáveis ao RCEnvironment , no entanto, parece que ele pode atualizar suas variáveis armazenadas instantaneamente, ou seja, sem a necessidade de uma reinicialização ou login, o que é bem-vindo.
Conforme declarado pelo desenvolvedor:
Isenção de responsabilidade: não tenho relação alguma com o desenvolvedor ou seu projeto.
PS Eu gosto do nome (soa como 'Ends Pain').
fonte
Atualização (04/08/2017)
A partir do (pelo menos) macOS 10.12.6 (Sierra), esse método parece ter parado de funcionar para o Apache httpd (tanto para
system
auser
opção quanto paralaunchctl config
). Outros programas não parecem ser afetados. É concebível que isso seja um bug no httpd.Resposta original
Isso se refere ao OS X 10.10+ (10.11+, especificamente devido ao modo sem raiz, onde
/usr/bin
não é mais gravável).Eu li em vários lugares que o uso
launchctl setenv PATH <new path>
para definir aPATH
variável não funciona devido a um bug no OS X (o que parece verdadeiro por experiência pessoal). Descobri que há outra maneira dePATH
definir aplicativos não lançados a partir do shell :Esta opção está documentada na página do manual launchctl:
Confirmei que isso funciona com um aplicativo GUI iniciado no Finder (que usa
getenv
para obter o PATH). Observe que você só precisa fazer isso uma vez e a alteração será persistente durante as reinicializações.fonte
sudo launchctl procinfo <gui-pid>
mostra oPATH
ambiente recém-definido . Massudo launchctl config user path <new path>
realmente definir para todos os usuários ... (confirmado pela adição de novo usuário e usando o console python do Sublime texto)sudo launchctl config user path
isso que acontece (o que você parece estar assumindo?).launchctl
que não permitem definir variáveis de ambiente arbitrárias. APATH
variável é uma exceção.No Mountain Lion, toda a edição
/etc/paths
e/etc/launchd.conf
não faz nenhum efeito!Os fóruns de desenvolvedores da Apple dizem:
Então, editei diretamente o aplicativo
Info.plist
(clique com o botão direito do mouse em "AppName.app" (neste caso, SourceTree) e depois em "Show package contents
").E eu adicionei um novo par de chave / dict chamado:
(consulte: Documentação LaunchServicesKeys na Apple )
Agora o aplicativo (no meu caso Sourcetree) usa o caminho especificado e trabalha com o Git 1.9.3 :-)
PS: É claro que você deve ajustar a entrada Caminho às suas necessidades específicas de caminho.
fonte
Info.plist
arquivo do aplicativo, ele falhará ao carregar:LSOpenURLsWithRole() failed with error -10810 for the file /Applications/Slack.app.
Embora as respostas aqui não estejam "erradas", adicionarei outra: nunca faça alterações de variável de ambiente no OS X que afetem "todos os processos", ou mesmo fora do shell, para todos os processos executados interativamente por um determinado usuário.
Na minha experiência, as alterações globais nas variáveis de ambiente, como PATH, para todos os processos, têm ainda mais chances de quebrar as coisas no OS X do que no Windows. Por isso, muitos aplicativos do OS X e outros softwares (incluindo, talvez especialmente os componentes do próprio sistema operacional) dependem das ferramentas de linha de comando do UNIX, e assumem o comportamento das versões dessas ferramentas fornecidas com o sistema, e não necessariamente use caminhos absolutos ao fazer isso (comentários semelhantes se aplicam a bibliotecas carregadas dinamicamente e variáveis de ambiente DYLD_ *). Considere, por exemplo, que as respostas mais bem classificadas para várias perguntas sobre o Stack Overflow sobre a substituição de versões de intérpretes fornecidas pelo OS X, como Python e Ruby, geralmente dizem "não faça isso".
O OS X não é realmente diferente de outros sistemas operacionais do tipo UNIX (por exemplo, Linux, FreeBSD e Solaris) a esse respeito; a razão mais provável pela qual a Apple não fornece uma maneira fácil de fazer isso é porque ela quebra as coisas . Na medida em que o Windows não é tão propenso a esses problemas, isso se deve a duas coisas: (1) o software Windows não tende a confiar nas ferramentas de linha de comando na medida em que o software UNIX o faz; e (2) a Microsoft teve um histórico tão extenso de "problemas com DLL" e problemas de segurança causados por alterações que afetam todos os processos que alteraram o comportamento do carregamento dinâmico nas versões mais recentes do Windows para limitar o impacto das opções de configuração "globais" como PATH.
"Manco" ou não, você terá um sistema muito mais estável se restringir essas alterações a escopos menores.
fonte
Às vezes, todas as respostas anteriores simplesmente não funcionam. Se você deseja ter acesso a uma variável do sistema (como
M2_HOME
) no Eclipse ou no IntelliJ IDEA, a única coisa que funciona para mim nesse caso é:Primeiro (etapa 1) edite
/etc/launchd.conf
para conter uma linha como esta: "setenv VAR value" e depois (etapa 2) reinicie.Simplesmente modificar .bash_profile não funcionará porque no OS X os aplicativos não são iniciados como em outros Unix; eles não herdam as variáveis de shell do pai. Todas as outras modificações não funcionarão por um motivo desconhecido para mim. Talvez alguém possa esclarecer sobre isso.
fonte
Depois de procurar o painel de preferências Variáveis de ambiente e descobrir que o link está quebrado, uma pesquisa no site da Apple parece indicar que eles se esqueceram dele. Comecei a seguir o rastro do processo de inicialização indescritível.
No meu sistema (Mac OS X 10.6.8), parece que as variáveis definidas em environment.plist estão sendo exportadas de maneira confiável para aplicativos iniciados no Spotlight (via launchd). Meu problema é que esses vars não estão sendo exportados para novas sessões do bash no Terminal. Ou seja, eu tenho o problema oposto, como retratado aqui.
NOTA: environment.plist se parece com JSON, não XML, conforme descrito anteriormente
Consegui que os aplicativos Spotlight vissem os vars editando ~ / MacOSX / environment.plist e pude forçar os mesmos vars a uma nova sessão do Terminal adicionando o seguinte ao meu arquivo .profile:
fonte
man launchd
,man launchctl
eman launchd.conf
em uma janela de terminal. Ainda bem que a Apple mantém as páginas de manual atualizadas, mesmo que a Biblioteca do Desenvolvedor Mac fique um pouco atrasada.Qualquer um dos arquivos da festança de arranque -
~/.bashrc
,~/.bash_profile
,~/.profile
. Há também algum tipo de arquivo estranho nomeado~/.MacOSX/environment.plist
para variáveis de ambiente nos aplicativos GUI.fonte
Assim como a resposta que Matt Curtis deu, eu defino variáveis de ambiente via launchctl, mas a envolvo em uma função chamada export, de modo que sempre que exporto uma variável como normal no meu .bash_profile, ela também é definida pelo launchctl. Aqui está o que eu faço:
Meu .bash_profile consiste apenas de uma linha (esta é apenas uma preferência pessoal).
Meu .bashrc tem isso:
O procedimento acima sobrecarregará a "exportação" interna do Bash e exportará tudo normalmente (você notará que eu exporto "exportação" com ela!) E, em seguida, defina-as adequadamente para ambientes de aplicativos OS X via launchctl, se você usa qualquer um dos seguintes:
Dessa forma, não preciso enviar todas as variáveis para o launchctl todas as vezes e posso apenas ter meu .bash_profile / .bashrc configurado da maneira que desejar. Abra uma janela do terminal, verifique as variáveis de ambiente em que você está interessado
launchctl getenv myVar
, altere algo em seu .bash_profile / .bashrc, feche a janela do terminal e abra-a novamente, verifique a variável novamente com o launchctl, e pronto, isso mudou.Novamente, como as outras soluções para o mundo pós-Mountain Lion, para que novas variáveis de ambiente estejam disponíveis para aplicativos, é necessário iniciá-las ou reiniciá-las após a alteração.
fonte
Aqui está uma maneira muito simples de fazer o que você deseja. No meu caso, estava fazendo o Gradle funcionar (para o Android Studio).
Execute o seguinte comando:
sudo nano /etc/paths
ousudo vim /etc/paths
Digite sua senha, quando solicitado.
Abra uma nova janela do terminal e digite:
echo $PATH
Você deve ver o novo caminho anexado ao final do PATH.
Eu recebi esses detalhes deste post:
Adicione ao PATH no Mac OS X 10.8 Mountain Lion e acima
fonte
Acho que o OP está procurando uma solução simples, semelhante ao Windows.
Aqui está:
http://www.apple.com/downloads/macosx/system_disk_utilities/environmentvariablepreferencepane.html
fonte
Para ser conciso e claro sobre o objetivo de cada arquivo
~/.profile
é fornecido sempre que o Terminal.app é iniciado~/.bashrc
é onde "tradicionalmente" todas as instruções de exportação para o ambiente Bash são definidas/etc/paths
é o arquivo principal no Mac OS que contém a lista de caminhos padrão para criar a variável de ambiente PATH para todos os usuários/etc/paths.d/
contém arquivos que contêm caminhos de pesquisa adicionaisOs programas não terminais não herdam as variáveis PATH e MANPATH em todo o sistema que o seu terminal faz! Para definir o ambiente para todos os processos iniciados por um usuário específico, disponibilizando variáveis de ambiente para aplicativos da interface gráfica do usuário do Mac OS X, essas variáveis devem ser definidas no seu
~/.MacOSX/environment.plist
(Apple Technical Q&A QA1067)Use a seguinte linha de comando para sincronizar
environment.plist
com/etc/paths
:fonte
O /etc/launchd.conf não é usado no OS X v10.10 (Yosemite), no OS X v10.11 (El Capitan), no macOS v10.12 (Sierra) ou no macOS v10.13 (High Sierra).
Na
launchctl
página do manual:O método descrito nesta resposta Perguntar a diferentes funciona para mim (após uma reinicialização): os aplicativos iniciados no Dock ou no Spotlight herdam as variáveis de ambiente definidas por mim
~/Library/LaunchAgents/my.startup.plist
. (No meu caso, eu precisava definirLANG
, paraen_US.UTF-8
, um plug-in Sublime Text.)fonte
A
$PATH
variável também está sujeitapath_helper
, que por sua vez utiliza o/etc/paths
arquivo e os arquivos em/etc/paths.d
.Uma descrição mais completa pode ser encontrada em PATH e outros problemas ambientais no Leopard (2008-11).
fonte
É simples:
Edite ~ / .profile e coloque suas variáveis da seguinte maneira
No arquivo colocado:
Salvar (: wq)
Reinicie o terminal (saia e abra-o novamente)
Certifique-se de que tudo esteja bem:
fonte
Para uma única modificação do usuário, use
~/.profile
os que você listou. O link a seguir explica quando os diferentes arquivos são lidos pelo Bash.http://telin.ugent.be/~slippens/drupal/bashrc_and_others
Se você deseja definir a variável de ambiente para aplicativos da GUI, precisa do arquivo ~ / .MacOSX / environment.plist
fonte
Bem, não tenho certeza sobre os arquivos
/etc/paths
e~/.MacOSX/environment.plist
. Esses são novos.Mas com o Bash, você deve saber que
.bashrc
é executado a cada nova chamada de shell e.bash_profile
é executado apenas uma vez na inicialização.Não sei com que frequência isso ocorre no Mac OS X. Acho que a distinção foi quebrada com o sistema de janelas lançando tudo.
Pessoalmente, elimino a confusão criando um
.bashrc
arquivo com tudo o que preciso e depois faço:fonte
Uma coisa a ser observada, além das abordagens sugeridas, é que, pelo menos no OS X 10.5 (Leopard), as variáveis definidas
launchd.conf
serão mescladas com as configurações feitas no.profile
. Suponho que provavelmente também seja válido para as configurações~/.MacOSX/environment.plist
, mas não o verifiquei.fonte
Configure sua variável de ambiente PATH no Mac OS
Abra o programa Terminal (isso está na sua pasta Aplicativos / Utilitários por padrão). Execute o seguinte comando
Isso abrirá o arquivo no seu editor de texto padrão.
Para Android SDK como exemplo:
Você precisa adicionar o caminho ao diretório de ferramentas e ferramentas da plataforma SDK do Android. No meu exemplo, usarei "/ Development / android-sdk-macosx" como o diretório em que o SDK está instalado. Adicione a seguinte linha:
Salve o arquivo e feche o editor de texto. Execute seu .bash_profile para atualizar seu PATH:
Agora, toda vez que você abrir o programa Terminal, seu PATH incluirá o Android SDK.
fonte
Só fiz isso muito fácil e rápido. Primeiro crie um ~ / .bash_profile a partir do terminal:
então
adicionar
salve o documento e pronto.
fonte
É bem simples Edite o arquivo
.profile
(vi, nano , Sublime Text ou outro editor de texto). Você pode encontrá-lo no~/
diretório (diretório do usuário) e definir assim:Exemplo com Java home:
Salve-o e retorne ao terminal.
Você pode recarregá-lo com:
Ou feche e abra a janela do seu terminal.
fonte
Existem dois tipos de conchas em jogo aqui.
É importante entender aqui que com Bash, arquivo
.bashrc
é somente leitura por um escudo que é tanto interativo e não-login, e você vai achar que as pessoas muitas vezes carregar.bashrc
em.bash_profile
superar esta limitação.Agora que você tem o entendimento básico, vamos seguir como eu aconselho você a configurá-lo.
.bash_file:
fonte
Conchas de login
O shell primeiro executa os comandos no arquivo
/etc/profile
. Um usuário que trabalha com privilégios de root pode configurar esse arquivo para estabelecer características padrão em todo o sistema para usuários que executam o Bash.Em seguida a aparência de casca para
~/.bash_profile
,~/.bash_login
e~/.profile
(~ / é mão curto para o seu diretório home), nessa ordem, executar os comandos no primeiro desses arquivos que encontrar. Você pode colocar comandos em um desses arquivos para substituir os padrões definidos/etc/profile
. Um shell em execução em um terminal virtual não executa comandos nesses arquivos.Quando você efetua logout, o bash executa comandos no
~/.bash_logout
arquivo. Esse arquivo geralmente contém comandos que são limpos após uma sessão, como aqueles que removem arquivos temporários.Cascas interativas sem registro
Embora não seja chamado diretamente pelo bash, muitos
~/.bashrc
arquivos são chamados/etc/bashrc
. Essa configuração permite que um usuário que trabalha com privilégios de root estabeleça características padrão em todo o sistema para shells bash sem logon.Um shell interativo sem logon executa comandos no
~/.bashrc
arquivo. Normalmente, um arquivo de inicialização para um shell de logon, como.bash_profile
, executa esse arquivo, portanto, os shells de logon e não logon executam os comandos.bashrc
.Como os comandos in
.bashrc
podem ser executados muitas vezes e como os subshells herdam variáveis exportadas, é uma boa ideia colocar comandos que sejam adicionados às variáveis existentes no.bash_profile
arquivo.fonte
Toda a mágica no iOS só é usada
source
com o arquivo, para o qual você exporta suas variáveis de ambiente.Por exemplo:
Você pode criar um arquivo como este:
Salve este arquivo como
bimbom.env
e façasource ./bimbom.ev
. Voilá, você tem suas variáveis de ambiente.Verifique-os com:
fonte
Para o Bash, tente adicionar suas variáveis de ambiente ao arquivo
/etc/profile
para torná-las disponíveis para todos os usuários. Não há necessidade de reiniciar, basta iniciar uma nova sessão do Terminal.fonte