Configurando a variável de ambiente PATH em todo o sistema no Mavericks

41

Nas versões anteriores do sistema operacional, era possível definir a variável de ambiente PATH em todo o sistema /etc/launchd.confpara torná-la disponível para todos os aplicativos (não apenas a linha de comando).

No Mavericks, isso parece não ser mais usado.

Existe outra técnica para fazer isso em dissidentes?

Tom
fonte

Respostas:

51

Yosemite

/etc/launchd.confnão é mais suportado na 10.10. Veja man launchctl:

O arquivo /etc/launchd.conf não é mais consultado para que os subcomandos sejam executados durante o início da inicialização; essa funcionalidade foi removida por considerações de segurança.

Agora você pode, por exemplo, salvar este plist como ~/Library/LaunchAgents/my.startup.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>my.startup</string>
  <key>ProgramArguments</key>
  <array>
    <string>sh</string>
    <string>-c</string>
    <string>launchctl setenv PATH /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin</string>
  </array>
  <key>RunAtLoad</key>
  <true/>
</dict>
</plist>

O launchctl setenvcomando é executado como usuário, portanto, aplica-se apenas aos processos iniciados no domínio do usuário.

Este método não se aplica a aplicativos que são reabertos no logon se "Reabrir janelas ao efetuar login novamente" estiver marcado.

Mavericks e anteriores

No 10.9 e versões anteriores, você pode, por exemplo, executar

echo setenv PATH /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin|sudo tee -a /etc/launchd.conf

e, em seguida, reinicie para aplicar as alterações.

Outros métodos

/etc/pathse /etc/paths.d/aplique apenas (ou principalmente) às conchas. As linhas /etc/pathse /etc/paths.d/*são adicionados ao caminho por path_helper , que é executado a partir de /etc/profile, /etc/zshenve /etc/csh.login. Eu não conheço nenhum outro programa além de conchas que consideraria /etc/pathsou /etc/paths.d/.

~/.MacOSX/environment.plist parou de funcionar em 10.8.

Lri
fonte
2
Sim; ele simplesmente não existe por padrão, mas criá-la e definir entradas adequadas ajuda
mgol
No Yosemite, descobri que alguns programas não parecem ver o PYTHONPATH, que eu configurei no /etc/launchd.conf e usei a correção da linha de comando (o segundo parágrafo da sua resposta) e parece que não funciona. , ele me fornece a mensagem de erro / ajuda do launchctl.
Tango
@Tango eu editei a resposta. /etc/launchd.conffoi removido em 10.10.
Lri 23/10
Acrescentarei que minha experiência, enquanto brincava com o bash, é que, em 10.10, o launchctl setenv parece não fazer nada. Eu tentei definir variáveis ​​env, verifiquei o valor com eco e elas ainda estavam indefinidas.
Tango #
1
@Tango Saia e reabra o aplicativo de terminal depois de executar launchctl setenv. launchctl setenvnunca afetou os processos existentes.
Lr
11

Existe uma maneira muito mais fácil. Coloque um arquivo de texto na pasta /etc/paths.d/. Nesse arquivo de texto, insira o caminho desejado E uma nova linha. A melhor maneira é criar um novo arquivo para cada caminho.

No meu sistema, existe um arquivo chamado MySQL com o texto '/ usr / local / mysql / bin' e uma nova linha.

CAryaSil
fonte
Acabei de postar uma nova pergunta sobre se existem maneiras de abordar a fraqueza descrita por @LauriRanta.
precisa saber é o seguinte
Apenas uma anedota: Eu também usei esse método, pois é o "caminho do OS X recomendado". Não tive muita sorte em conseguir que o Sistema honrasse consistentemente os arquivos PATH que tenho em /etc/paths.d e geralmente acabo usando o comando export shell ou colocando meus PATHs em ~ / .bash_profile, que sempre funcionam, apenas para minha conta de usuário atual e não para todo o sistema. Se os arquivos de caminho na /etc/paths.d sempre funciona para você, então eu sou ciumento de que seu sistema é melhor comportado do que o meu;)
Chillin
Este é novo para mim. Agradável!
CousinCocaine
3

Você pode definir variáveis ​​de ambiente no arquivo /etc/launchd-user.conf...

No Mavericks, consegui configurar uma variável de ambiente no arquivo usando a linha:

setenv TEST test

Após uma nova inicialização, $TESTem /etc/launchd-user.conf está definido.

Editar

É possível que a sintaxe do arquivo em /etc/launchd.conf seja inválida. Você pode publicar o conteúdo desse arquivo para exame?

Pelo que estou vendo, definir a variável PATH no /etc/launchd.conf está funcionando normalmente. No entanto, launchdnão realiza nenhuma expansão de parâmetro . Portanto, se você tiver uma entrada como setenv PATH $PATH:/usr/local/bin, seu caminho resultante será definido como " $PATH:/usr/local/bin" (nota: não o valor de PATH, mas o texto "$ PATH")

Eddie Kelley
fonte
Obrigado, o problema que estou tendo é definir o PATH, outras variáveis ​​de ambiente parecem funcionar.
Tom
@ Tom - Eu forneci uma sugestão adicional acima
Eddie Kelley
1
é realmente launch-user.conf ou launch- [current_user_name] .conf
Shanimal
O arquivo /etc/launchd.conf que contém 'setenv TEST test' não se propaga para o Terminal no meu Mavericks.
Dave X
Oops: s / Mavericks / Yosemite /.
Dave X
0

na minha instalação do Mavericks, adicionar "setenv PATH blablabla" ao /etc/launchd.conf não funcionou após a reinicialização

então adicionei meu novo caminho ao final do / etc / caminhos, que funcionou.

George Dima
fonte
Não funcionou para mim. Reiniciei, /etc/pathscontém tudo o que quero e, no entanto, o Sublime ainda vê apenas o PATH original. Se eu executá-lo no terminal, ele funciona.
mgol
O comando path_helper em meus / etc / usos perfil / etc / caminhos e /etc/paths.d para substituir qualquer caminho que pode ter sido definido por /etc/launchd.conf
Dave X
0

Descobri que o setenv PATH ainda funciona para mim no Terminal e nos aplicativos, mas quebrei os scripts do shell, iniciados diretamente via clique ou Abrir com no Terminal, digamos, do Finder. É muito estranho. Outras variáveis ​​de ambiente definidas no /etc/launchd.conftrabalho.

Para corrigi-lo para scripts shell lançados diretamente, eu dupliquei a configuração do PATH ~/.bash_profile.

DKroot
fonte
0

Editar /etc/paths.dou usar .bash_profilenão funcionou para mim, no entanto, como sugerido por outra pessoa (na verdade, vim aqui para votar novamente sua resposta, mas não consegui encontrá-la novamente ?!), editei o /etc/pathsque funciona para mim

No meu caso, adicionei a ferramenta android adbe androidaos comandos do terminal apontando para seus caminhos sdk ( adbmudou-se para outro diretório hoje em dia) que se parecem com

/usr/local/bin
...
/Applications/adt-bundle-mac/sdk/platform-tools  //new entries
/Applications/adt-bundle-mac/sdk/tools
longi
fonte
0

SWEET, adicionando esse XML a ~ / Library / LaunchAgents / setenv.SVN.plist, permitiu ao BBEdit usar os binários do subversion que instalei em / opt.

<clip>
<string>launchctl setenv PATH /opt/subversion/bin:$PATH</string>
<clip>
Mark M
fonte
1
Alguma idéia de como determinar se este arquivo suporta a expansão de parâmetros? Eu posso ter definido o caminho para que o / opt seja o único. E eu estou pensando que provavelmente não suporta o uso de $ PATH. Como você determinaria o caminho existente para começar?
Mark M
-1

Simplesmente adicione seu caminho 'bin' (o caminho que você deseja adicionar) ao arquivo / etc / caminhos - reinicie ou faça login novamente !!!

sudo vi /etc/paths 
(create a file (paths file) if it does't exist, I am using 'vi' editor, you can use your own as super user )
then, add your bin directory path like below 

/usr/local/mysql/bin
/usr/local/apache-ant-1.9.3/bin
/usr/local/gradle-1.11/bin

salve o arquivo e faça logon novamente ... espero que ajude

code0110
fonte