Como adicionar um diretório ao PATH?

730

Como faço para adicionar um diretório ao $PATHUbuntu e tornar as alterações permanentes?

justingrif
fonte
2
help.ubuntu.com/community/EnvironmentVariables Há tudo que você precisa saber. Eu descobri que muitas das entradas aqui estavam incorretas ou pelo menos o método não foi sugerido. Essa é uma excelente informação que permitirá que você descubra onde modificar sua variável de ambiente com base no motivo de fazê-lo e exatamente como fazê-lo sem estragar tudo (como fiz seguindo alguns dos maus conselhos acima mencionados). Adeus e obrigado pelos peixes!
Bus42

Respostas:

455

Usando ~ / .profile para definir $ PATH

Um caminho definido .bash_profilesomente será definido em um shell de login do bash ( bash -l). Se você colocar o seu caminho, .profileele estará disponível para toda a sessão da área de trabalho. Isso significa que até a metacidade o usará.

Por exemplo ~/.profile:

if [ -d "$HOME/bin" ] ; then
  PATH="$PATH:$HOME/bin"
fi

Aliás, você pode verificar a variável PATH de um processo observando seu ambiente em /proc/[pid]/environ(substitua [pid] pelo número de ps axf). Por exemplo, usegrep -z "^PATH" /proc/[pid]/environ

Nota:

bashcomo um shell de logon não analisa .profilese existe .bash_profileou .bash_loginexiste. De man bash:

procura por ~ / .bash_profile, ~ / .bash_login e ~ / .profile, nessa ordem, e lê e executa comandos do primeiro que existe e é legível.

Consulte as respostas abaixo para obter informações sobre .pam_environment, ou .bashrcsobre shells interativos sem logon, ou defina o valor globalmente para todos os usuários, colocando um script /etc/profile.d/ou sendo usado /etc/X11/Xsession.d/para afetar a sessão dos gerenciadores de exibição.

ko-dos
fonte
5
Legal, isso funcionou. Eu vi onde ele adicionará automaticamente o diretório bin se eu fizer isso, então apenas o usei em vez de scripts. TY.
justingrif
5
No Xbunutu .profile não pode ser executado, então eu o coloco em .bashrc e funciona.
Tekumara
13
Esta documentação está muito bem feita: Documentação oficial sobre variável de ambiente . Considere lê-lo (para não dizer que é atualizado para a última versão das regras para adicionar valores à variável de ambiente).
31513 Michele
3
Onde em .profile adicionamos o caminho?
Vineet Kaushik
3
Ainda não tenho ideia de onde adicionar minha parte do caminho extra. Preciso adicionar o SDK do Android ao meu caminho ... PATH="$HOME/bin:$PATH"Então, adiciono-o?
precisa saber é o seguinte
303

Edite .bashrcno seu diretório pessoal e adicione a seguinte linha:

export PATH="/path/to/dir:$PATH"

Você precisará obter seu .bashrclogout / logon (ou reiniciar o terminal) para que as alterações entrem em vigor. Para obter sua fonte .bashrc, basta digitar

$ source ~/.bashrc
Ophidian
fonte
3
Como você "compra seu .bashrc"? Como você "reinicia o terminal"?
isomorphismes
3
No bash é simplesmente '. .bashrc '
Ophidian
1
Eu estava assumindo que você estava no seu diretório pessoal. já que é onde está o .bashrc que você deseja editar.
Ofidiana
21
.bashrcnão é o lugar certo para definir variáveis ​​de ambiente. Eles devem entrar .profileou .pam_environment. Veja mywiki.wooledge.org/DotFiles
geirha 2/12/12
4
@LaoTzu . .bashrcnão .bashrc:) ou source .bashrcpara que o assunto
Znarkus
120

O local recomendado para definir variáveis ​​de ambiente permanentes em todo o sistema que se aplicam a todos os usuários está em:

/etc/environment

(onde PATHé definido o padrão )

Isso funcionará em desktop ou console, terminal gnome ou TTY, faça chuva ou faça sol;)

  • Para editar, pressione Alt+ F2e digite:

    gksudo gedit /etc/environment
    

    (ou abra o arquivo usando sudono seu editor de texto favorito)

Para efetuar alterações, execute . /etc/environment. Como esse arquivo é apenas um script simples, ele será executado e atribuirá o novo caminho à PATHvariável de ambiente. Para verificar executar env e ver o PATHvalor na listagem.

Palavras-chave:

ish
fonte
6
e então você precisa reinicializar para que as alterações entrem em vigor ... #
1717 Lee Lee
2
Isso é exatamente o que eu precisava. Provisionar uma imagem vm descartável via vagrant e necessário adicionar nó e npm ao caminho.
Austin Pray
7
Para efetuar alterações na execução, execute. / etc / environment (sim, ponto, um espaço e / etc / environment). Como esse arquivo é apenas um script simples, ele será executado e atribuirá o novo caminho à variável de ambiente PATH. Para verificar executar env e ver o valor PATH na lista.
WindRider 20/05
1
Eu precisava correr source /etc/environmentpara recarregar as mudanças
JohnnyAW
@JohnnyAW: source é equivalente ao ponto inicial; veja, por exemplo, en.wikipedia.org/wiki/Source_(command) .
Roland Sarrazin
58

Eu acho que a maneira canônica no Ubuntu é:

  • crie um novo arquivo em /etc/profile.d/

    sudo vi /etc/profile.d/SCRIPT_NAME.sh
    
  • adiciona lá:

    export PATH="YOUR_PATH_WITHOUT_TRAILING_SLASH:$PATH"
    
  • e dê permissão para executar

    sudo chmod a+x /etc/profile.d/SCRIPT_NAME.sh
    
woto
fonte
20
Geralmente, é mais seguro adicionar seu caminho personalizado ao final do PATH, em vez do início. Isso evita a substituição acidental de comandos do sistema pelos seus programas (ou programas maliciosos de outra pessoa). Isso também evita muita confusão quando alguém trabalha no seu sistema (ou dá conselhos) e obtém resultados inesperados dos comandos que você "substituiu".
7373 Joe
47

Para iniciantes completos (como eu sou) que estão mais à vontade com a GUI:

  1. Abra sua $HOMEpasta.
  2. Vá para ExibirMostrar arquivos ocultos ou pressione Ctrl+ H.
  3. Clique com o botão direito .profilee clique em Abrir com o Editor de texto .
  4. Role para baixo e adicione PATH="$PATH:/my/path/foo".
  5. Salve .
  6. Saia e faça login novamente para aplicar as alterações (deixe o Ubuntu realmente carregar .profile).
dain
fonte
4
Editando o arquivo .profile não é recomendado anymore.You ainda pode usar esse método para editar o arquivo .pam_environment ver: help.ubuntu.com/community/EnvironmentVariables
PulsarBlow
Obrigado @PulsarBlow! Não tenho muita certeza de qual é exatamente a diferença e o benefício ... Essa é a URL direta da seção relevante: help.ubuntu.com/community/…
dain
1
Esta resposta fez com que o meu sistema parasse de efetuar o login devido a todos os caminhos serem substituídos. Usando o Ubuntu 16.04.
Frisbetarian
1
@Frisbetarian você tem que certificar-se de adicionar o $PATH:pouco que inclui a definição PATH existente
dain
@ Dain: seu comentário salvou minha vida!
Py-ser
46

Para variáveis ​​de ambiente persistentes disponíveis apenas para usuários específicos. Eu recomendo a documentação oficial do Ubuntu.

https://help.ubuntu.com/community/EnvironmentVariables

Referindo-me à documentação acima, configurei minhas ferramentas de caminho do SDK do Android :

  1. criando ~/.pam_environmentarquivo no diretório inicial.
  2. cujo conteúdo é PATH DEFAULT=${PATH}:~/android-sdk-linux/tools.
  3. caminho de usuário personalizado adicional pode ser adicionado, separando caminhos com dois pontos (:) .
  4. isso requer um novo login , o que significa que você precisa sair e entrar novamente no ambiente da área de trabalho.
Eduardo B.
fonte
1
Esta é a melhor resposta.
Paulo Coghi 22/08/2015
26

Coloque essa linha no seu ~/.bashrcarquivo.

Ele é adquirido sempre que você abre um terminal

EDIT : Com base nos comentários abaixo, para uma definição mais geral que se aplica a todos os shells (incluindo quando você bate Alt- F2em Unity), adicione a linha ao seu ~/.profilearquivo. Provavelmente não deve fazer as duas coisas, pois o caminho será adicionado duas vezes ao seu PATHambiente se você abrir um terminal.

Ian B.
fonte
1
Na verdade, pensei que você definisse o caminho $HOME/.profilepara configurações pessoais ou /etc/profilepara todos os usuários. Mas se for necessário apenas para o bash, suponho que ambos funcionem.
Marty Fried
1
Se você configurá-lo ~/.bashrc, ele estará disponível apenas nos terminais que você abrir. Por exemplo, se você pressionar Alt + F2 e tentar executar um comando desse diretório, ele não o encontrará. Se você configurá-lo ~/.profileou ~/.pam_environment, a sessão do gnome (ou o DE que você usar) o herdará. Anexar PATH ~/.bashrctambém tem a desvantagem de que, se você abrir / executar o bash interativamente a partir de outro shell do bash interativo, ele será anexado várias vezes.
Geirha
2
Eu realmente não olho para isso há um tempo, então fiz uma pesquisa e parece que existem pelo menos 95 maneiras diferentes de definir o caminho, a maioria das quais são discutidas aqui . Eu nunca descobri qual é o melhor. Eu acho que ~/.profileé correto para caminhos pessoais; é aí que o Ubuntu adiciona o ~/bindiretório. E confesso que exagerei um pouco no número de maneiras - só um pouco.
Marty Fried
1
@MartyFried, sim, para citar o bot em #bash no freenode: «A esmagadora maioria dos scripts, códigos, tutoriais e guias do bash na Internet é uma porcaria. O esturjão era otimista. »Usando o google para o problema do bash, muitas vezes você encontra muitas soluções de semi-trabalho antes de encontrar uma boa. Ah, e eu também aceitaria ~/.profileesse caso.
geirha
1
@geirha - Concordo que a maioria dos guias na Internet em geral é provavelmente uma porcaria, especialmente qualquer coisa linux, já que diferentes distribuições, ou mesmo versões diferentes do mesmo, fazem as coisas de maneira diferente. Geralmente, tudo se resume ao que funciona, mas a maioria das pessoas não percebe que o que funciona é simplesmente o que funciona, não necessariamente o que é certo ou mesmo o que sempre funcionará. Tento descobrir qual das muitas maneiras está realmente correta, porque odeio fazer as coisas mais de uma vez - mas nem sempre é fácil. :)
Marty Fried
15

Para definir todo o sistema, anexe a linha export PATH=/path/you're/adding:$PATHao final de /etc/profile.

Para adicionar o diretório apenas para o usuário conectado, anexe a mesma linha a ~/.bash_profile.

ennuikiller
fonte
14

Adicioná-lo ao .bashrc funcionará, mas acho que a maneira mais tradicional de configurar suas variáveis ​​de caminho é no .bash_profile adicionando as seguintes linhas.

PATH=$PATH:/my/path/foo
export PATH

De acordo com este tópico , parece que o comportamento do Ubuntu é um pouco diferente do RedHat e dos clones.

3dinfluence
fonte
1
Não tenho um perfil .bash, devo criá-lo?
justingrif 22/07/2009
7
Se você tiver .bashrc, cole-o em seu .bashrclugar. Os terminais GUI no Ubuntu não são shell de login, portanto .bash_profilenão serão executados.
1
Eu não estou executando um shell GUI. Mas, a partir do tópico acima, parece que o .bashrc funcionará perfeitamente.
justingrif
2
Ambos funcionarão se o seu shell for um shell de login. Mas eu apenas tentei a abordagem .bash_profile em uma das minhas máquinas Ubuntu e, mesmo depois de reiniciar a minha sessão do gnome, ela não originou o meu .bash_profile. Então, eu diria que colocar isso no .bashrc é provavelmente o caminho a seguir com o Ubuntu.
3dinfluence
3
@justingrif Não, você não precisa .bash_profile. Se o bash não encontrar um .bash_profile(quando você fizer logon interativamente), ele procurará .profilee o utilizará. Por padrão, você terá um .profilee .bashrcno Ubuntu. E .profileé o local correto para definir variáveis ​​de ambiente se desconsiderarmos pam_env.
precisa saber é o seguinte
10

No terminal, cdparathe_directory_you_want_to_add_in_the_path

echo "export PATH=$(pwd):\${PATH}" >> ~/.bashrc

Não foi ideia minha. Eu encontrei este caminho para exportar o caminho neste blog aqui .

Vittorio Cecchetto
fonte
8
sudo vi /etc/profile.d/SCRIPT_NAME.sh

adiciona lá

export PATH=YOUR_PATH_WITHOUT_TRAILING_SLASH:$PATH
Jorge Castro
fonte
2
sudo nano /etc/profile.d/SCRIPT_NAME.shé mais fácil para iniciantes.
isomorphismes
1
Para iniciantes, gksu gedit /etc/profile.d/SCRIPT_NAME.shé ainda mais fácil.
fouric
6

Sempre que "instalo" minha pasta de scripts BASH, sigo o padrão do teste para uma $HOME/binpasta que está na maioria dos arquivos .profile nas versões recentes do Ubuntu. Eu defino um teste que se parece

if [ -d "/usr/scripts" ]; then
   PATH="/usr/scripts:$PATH"
fi

Funciona quase 100% do tempo e me deixa livre para alterá-lo em um editor de texto da GUI com um rápido "Substituir tudo", caso eu decida mudar para /scriptsalgum lugar mais perto da minha $HOMEpasta. Eu não fiz isso em 6 instalações do Ubuntu, mas há "sempre amanhã". S

BZT

Silversleevesx
fonte
6

A maneira recomendada de editar o seu PATHé do /etc/environmentarquivo

Exemplo de saída de /etc/environment:

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"

Por exemplo, para adicionar o novo caminho de /home/username/mydir

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/username/mydir"

Em seguida, reinicie o seu PC.


Variáveis ​​de ambiente em todo o sistema

Um arquivo adequado para configurações de variáveis ​​de ambiente que afetam o sistema como um todo (em vez de apenas um usuário específico) é / etc / environment. Uma alternativa é criar um arquivo para esse fim no diretório /etc/profile.d.

/ etc / environment

Este arquivo é destinado especificamente para configurações de variáveis ​​de ambiente em todo o sistema. Não é um arquivo de script, mas consiste em expressões de atribuição, uma por linha.

Nota: A expansão variável não funciona no / etc / environment.

Mais informações podem ser encontradas aqui: EnvironmentVariables

Benny
fonte
1
A resposta mais baixa e ainda a mais correta. Este arquivo geralmente é preenchido automaticamente com o caminho do Ubuntu.
NotoriousPyro
4

Abra seu terminal, digite gedit .profilee insira o seguinte:

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
    PATH="$PATH:$HOME/bin"
fi

 #the following line add Bin where you dont have a Bin folder on your $HOME
    PATH="$PATH:/home/mongo/Documents/mongodb-linux-i686-2.2.2/bin"

Feche e abra o terminal, ele deve estar funcionando.

djavier
fonte
2

Coloque-o na sua ~/.bashrcou em qualquer outra camada que você use rc (ou acima ~/.profile) E ~/.xsessionrcpara que também funcione no X (shell externo).

Mikaela
fonte
1

Mesmo que os scripts do sistema não usem isso, em qualquer um dos casos em que se queira adicionar um caminho (por exemplo, $HOME/bin) à variável de ambiente PATH, deve-se usar

PATH="${PATH:+${PATH}:}$HOME/bin"

para anexar (em vez de PATH="$PATH:$HOME/bin") e

PATH="$HOME/bin${PATH:+:${PATH}}"

para anexar (em vez de PATH="$HOME/bin:$PATH").

Isso evita o cólon $PATHinicial / final espúrio quando está inicialmente vazio, o que pode ter efeitos indesejados.

Consulte, por exemplo, https://unix.stackexchange.com/questions/162891/append-to-path-like-variable-without-creating-leading-colon-if-unset

sancho.s
fonte
-1

Para o Ubuntu, edite ~/.bashrce adicione a seguinte linha.

. ~/.bash_profile

Em seguida, edite seu .bash_profile conforme necessário .....

Jorge Castro
fonte
1
Voto negativo porque você não explicou como "editar o .bash_profileque você precisa". O que exatamente eu preciso fazer para o .bash_profile?
isomorphismes
4
Este é o caminho errado. .profileou .bash_profiledeve fonte .bashrc. Não o contrário.
Geirha #