Como eu defino a variável de ambiente PATH global no OS X?

98

Gostaria de acrescentar à variável de ambiente PATH global no OS X para que todos os shells de usuários e aplicativos GUI obtenham o mesmo ambiente PATH.

Eu sei que posso anexar o caminho em scripts de inicialização do shell, mas essas configurações não são herdadas por aplicativos GUI.

A única maneira que encontrei até agora é redefinir a variável de ambiente PATH em /etc/launchd.conf :

setenv PATH /usr/bin:/bin:/usr/sbin:/sbin:/my/path

Eu não consegui encontrar uma maneira de realmente acrescentar ao PATH em launchd.conf .

Estou um pouco preocupado com este método, mas até agora esta é a única coisa que funciona. Existe uma maneira melhor?

    
por lajos 31.05.2009 / 21:08

8 respostas

70

palmer As informações da GUI estão corretas, mas existe uma maneira mais sustentável de modificar o caminho visto pelo shell. Como mediaslave disse , você pode editar /etc/paths , mas ainda melhor você pode soltar um arquivo de texto em /etc/paths.d/ que tem um caminho nele e todos os shells construirão o caminho corretamente.

Por exemplo, no meu sistema:

$ cat /etc/paths
/usr/bin
/bin
/usr/sbin
/sbin
/usr/local/bin
$ ls /etc/paths.d
X11       git      postgres
$ cat /etc/paths.d/postgres
/Library/PostgreSQL/8.4/bin
$ echo $PATH
/opt/local/bin:/opt/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/git/bin:/Library/PostgreSQL/8.4/bin:/usr/X11/bin:/usr/local/mysql/bin
    
por 28.05.2010 / 08:53
47

/etc/launchd.conf

O arquivo launchd.conf é ** a única solução completa que funcionará para aplicativos de linha de comando e GUI no OS X v10. 8 (Mountain Lion) e v10.9 (Mavericks), um que funcionará com aplicativos GUI e de console , para todos os usuários.

sudo touch /etc/launchd.conf
sudo nano /etc/launchd.conf

Adicionar

setenv PATH /usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin

No exemplo acima, adicionei /usr/local/bin aos valores de ambiente padrão para o PATH.

Tenha em mente que este arquivo não é um script e você não tem a opção de usar substituições. Além disso, para que isso seja aplicado, você precisa reinicializar.

Lembre-se de que todos os outros são apenas soluções parciais:

  • environment.plist não funciona para aplicativos lançados via Spotlight.
  • /etc/paths - apenas para o console
  • /etc/csh.cshrc ou /etc/bashrc - apenas para alguns shells

Essa resposta é baseada na mesma pergunta de Configuração de variáveis de ambiente no Mac OS X     

por 04.06.2011 / 22:30
7

Você terá que configurá-lo shell-by-shell; Bash e shells como csh não compartilham os mesmos arquivos de configuração e sintaxe para ajustar o PATH.

Tentar fazer isso em launchctl não funcionará, porque as variáveis de ambiente são definidas no login; eles não existem em todo o sistema no Unix fora de uma sessão de shell.

Então você vai querer adicionar

setenv PATH "$PATH:/add/my/extra/path"

para /etc/csh.cshrc e

export PATH="$PATH:/more/paths:/

para /etc/bashrc .

Se você quiser variáveis de ambiente em aplicativos GUI, isso é mais complicado. Você precisa criar um arquivo .MacOSX/environment.plist no diretório inicial de cada usuário. O diretório .MacOSX provavelmente não existirá por padrão, então você terá que criá-lo.

O formato do arquivo é assim:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>

    <key>PRINTER</key>
    <string>myprinter</string>

    <key>PATH</key>
    <string>/path/to/thing/I/need</string>

    <key>DISPLAY</key>
    <string>0:1</string>

</dict>
</plist>

Mais informações sobre o environment.plist estão no site da Apple .

    
por 01.06.2009 / 14:24
3

Você pode editar seu caminho global adicionando linhas a /etc/paths , um caminho por linha.

sudo nano /etc/paths deve chegar até você.

    
por 03.09.2009 / 20:04
1

Já deu uma olhada na página man do utilitário de linha de comando path_helper no OS X? Eu respondi um pergunta um pouco relacionada sobre SO que eu acho que você pode achar útil.

    
por 01.06.2009 / 14:50
1

Não sei se alguém cobriu o modo mais simples e mais elegante . Pelo menos em Mac OS X v10.6 (Snow Leopard).

Mexer com os arquivos [/etc/|~/.] of [profile|bashrc] pode funcionar, mas é um pouco um hack. O diretório /etc/paths.d/ é o caminho a seguir:

  • use o seu editor favorito.
  • Crie um novo arquivo chamado *name* (apenas não diga o nome de algo que já está lá) em /etc/paths.d/ com um caminho por linha:

    /usr/X11/bin
    /Developer/usr/bin
    
  • Em seguida, adicione

    eval '/usr/libexec/path_helper -s'
    

    para profile ou bashrc , e você deve estar pronto.

por 31.01.2011 / 08:22
0

Não tenho certeza se o launchd aceita isso, mas tente:

setenv PATH "$PATH:/my/path"
    
por 31.05.2009 / 21:26
0

Não sei por que você usou /etc/launchd.conf em vez de /etc/profile - mas não sou especialista em Mac OS X - acredito em você, tenho certeza de que funciona, mas launchd é a implementação / substituição do Mac OS X para init - o Mac OS X me confunde.

De qualquer forma, setenv PATH "$PATH:/more/paths:/and/more/paths" irá funcionar (tcsh), e o equivalente a shell da bourn é export PATH="$PATH:/more/paths:/and/more/paths" - Eu não tenho ideia de como launchd está relacionado a uma shell particular.

Acho que fiz mais perguntas do que respondi =)

    
por 01.06.2009 / 06:10