Como exportar permanentemente uma variável no Linux?

155

Estou executando o RHEL6 e exportei uma variável de ambiente como esta:

export DISPLAY=:0

Essa variável é perdida quando o terminal está fechado. Como adiciono isso permanentemente para que esse valor de variável sempre exista com um usuário específico?

user1340582
fonte

Respostas:

171

Você pode adicioná-lo ao seu arquivo de configuração do shell, por exemplo, $HOME/.bashrcou mais globalmente no /etc/environment. Após adicionar essas linhas, as alterações não serão refletidas instantaneamente nos sistemas baseados em GUI, você deverá sair do terminal ou criar um novo e, no servidor, sair da sessão e efetuar login para refletir essas alterações.

Antoine
fonte
3
Obrigado, isso é útil. Como posso fazer as alterações entrarem em vigor sem reiniciar? (Eu sou Linux novato)
Bitterblue
5
@ mini-me - ~ / bashrc é puxado cada vez que você abre um shell. Para carregá-lo explicitamente, use, sourcepor exemplo - - > source ~/.bashrc.
kostja
@kostja Para todas as novas conchas? Se eu tiver o eclipse em execução antes de alterar essas variáveis ​​env e desejar que o eclipse tenha alterado os vars, preciso reiniciar o eclipse?
Bitterblue #
1
@ mini-me: o ambiente de um processo geralmente é definido pelo chamador e alterado de dentro do processo. Alterar env de fora de um processo em execução é incomum e não factível com export, mas tente com um depurador
Antoine
1
@ Mr.Hyde: Geralmente não importa. Os arquivos são analisados ​​de cima para baixo; portanto, se uma definição var depende de outra, eles devem ser ordenados de acordo. Então, sim, o final do arquivo está bom.
Antoine
120

Você precisa editar três arquivos para definir uma variável de ambiente permanente da seguinte maneira:

  • ~ / .bashrc

    Quando você abre qualquer janela do terminal, esse arquivo será executado. Portanto, se você deseja ter uma variável de ambiente permanente em todas as janelas do terminal, adicione a seguinte linha no final deste arquivo:
    export DISPLAY = 0

  • ~ / .profile

  • Assim como o bashrc, você deve colocar a linha de comando mencionada no final deste arquivo para ter sua variável de ambiente em todos os logins do seu sistema operacional.

  • / etc / environment

  • Se você deseja que sua variável de ambiente seja exibida em todas as janelas ou aplicativos (não apenas na janela do terminal), é necessário editar este arquivo. Adicione o seguinte comando no final deste arquivo:
    DISPLAY = 0
    Observe que neste arquivo você não precisa gravar o comando de exportação

Normalmente você precisa reiniciar o computador para aplicar essas alterações. Mas você pode aplicar alterações no bashrc e no perfil por estes comandos:

$ source ~/.bashrc
$ source ~/.profile

Mas para o / etc / environment você não tem escolha a não ser reiniciar (tanto quanto eu sei)

  • Uma solução simples

  • Eu escrevi um script simples para esses procedimentos para fazer todo esse trabalho. Você apenas precisa definir o nome e o valor da sua variável de ambiente.

    #!/bin/bash
    echo "Enter variable name: "
    read variable_name
    echo "Enter variable value: "
    read variable_value
    echo "adding " $variable_name " to environment variables: " $variable_value
    echo "export "$variable_name"="$variable_value>>~/.bashrc
    echo $variable_name"="$variable_value>>~/.profile
    echo $variable_name"="$variable_value>>/etc/environment
    source ~/.bashrc
    source ~/.profile
    echo "do you want to restart your computer to apply changes in /etc/environment file? yes(y)no(n)"
    read restart
    case $restart in
        y) sudo shutdown -r 0;;
        n) echo "don't forget to restart your computer manually";;
    esac
    exit
    

    Salve essas linhas em um shfile, torne-o executável e execute-o!

    e_soroush
    fonte
    1
    O script funcionou muito bem. Eu tenho o Ubuntu 14.04 instalado. I acabou de colar o conteúdo acima em um arquivo em branco, nomeou- insert_var.sh , então chmod -x insert_var.sh, então bash insert_var.sh. Obrigado.
    Brunno Vodola Martins
    Abri uma janela de terminal no Ubuntu e digite export MY_VAR = 1. Onde essa variável MY_VAR será armazenada?
    vgokul129
    29

    adicione a linha ao seu .bashrcou .profile. As variáveis ​​definidas $HOME/.profileestão ativas para o usuário atual, e as /etc/profileglobais são globais. O .bashrcé puxado em cada início da sessão do bash.

    kostja
    fonte
    27

    Nos sistemas Ubuntu, use os seguintes locais:

    1. Variáveis ​​persistentes em todo o sistema no formato de JAVA_PATH=/usr/local/javaarmazenamento em

      /etc/environment
      
    2. Variáveis ​​persistentes em todo o sistema que referenciam variáveis ​​como
      export PATH="$JAVA_PATH:$PATH"armazenar em

      /etc/.bashrc
      
    3. Variáveis ​​persistentes específicas do usuário no formato de PATH DEFAULT=/usr/bin:usr/local/binarmazenamento em

      ~/.pam_environment
      

    Para mais detalhes sobre o item 2, verifique esta resposta Ask Ubuntu . NOTA: # 3 é a recomendação do Ubuntu, mas pode ter problemas de segurança no mundo real.

    csi
    fonte
    2

    Um exemplo específico: eu tenho o Java 7 e o Java 6 instalados, preciso executar algumas compilações com 6, outras com 7. Portanto, preciso alterar dinamicamente JAVA_HOMEpara que o maven atenda o que eu quero para cada compilação. Eu fiz o seguinte:

    • j6.shscript criado que simplesmente exporta o JAVA_HOME=...caminho para a instalação do j6 ...
    • então, como sugerido por um dos comentários acima, sempre que eu precisar do J6 para uma compilação, eu executo o código-fonte j6.shno respectivo terminal de comando. Por padrão, my JAVA_HOMEestá definido como J7.

    Espero que isto ajude.

    Cristian Botiza
    fonte