Questão Como adiciono variáveis ​​de ambiente?


Estou executando o Ubuntu 11.04. Eu uso o terminal para iniciar uma sessão bash e quero adicionar uma variável de ambiente:

$r@hajt:~$ env THEVAR=/example

Mas não está funcionando. Ele mostra todas as variáveis ​​com THEVAR sendo o último, mas outra chamada para env Não mostra THEVAR não mais- env | grep THEVAR não retorna nada.

Da mesma forma, scripts com exportação (export THEVAR=/example) ou outras atribuições variáveis ​​(THEVAR=/example) não adicione a variável de ambiente.

Eu sei que estou fazendo algo errado, eu sei que deveria ser algo simples, mas eu simplesmente não consigo encontrar o que.

ATUALIZAR: O verdadeiro significado da minha pergunta foi este: https://stackoverflow.com/questions/496702/can-a-shell-script-set-environment-variables-of-the-calling-shell

(De qualquer forma, vou escolher a resposta mais votada e deixar o título editado - isso não era o que eu estava perguntando)

env executa um programa em um ambiente modificado e, em seguida, descarta todas as alterações.


224
2017-08-27 00:22


origem


Quando definido / exportado em .bashrc, funciona corretamente. - huff
possível duplicata de Variável de ambiente do Google Earth e $ BROWSER - Isaiah
E se THEVAR=/example? - Oleh Prypin
A outra é sobre variáveis ​​globais, esta não acrescenta tal limitação. Eu manteria separado. - Lekensteyn
help.ubuntu.com/community/EnvironmentVariables - huff


Respostas:


Para definir variável  para o shell atual:

VARNAME="my value"

Para configurá-lo para o shell atual e todos os processos iniciado a partir do shell atual:

export VARNAME="my value"      # shorter, less portable version

Para configurá-lo permanentemente para todas as futuras sessões do bash adicionar essa linha ao seu .bashrc arquivo em seu $HOME diretório.

Para defini-lo permanentemente e sistema amplo (todos os usuários, todos os processos) adicionam set variable em / etc / environment:

sudo -H gedit /etc/environment

Este arquivo aceita apenas atribuições de variáveis ​​como:

VARNAME="my value"

Não use o export palavra chave aqui.

Você precisa efetuar logout do usuário atual e efetuar login novamente para que as alterações nas variáveis ​​de ambiente ocorram.


363
2017-08-27 07:50



Shell config files such as ~/.bashrc, ~/.bash_profile, and ~/.bash_login are often suggested for setting environment variables. While this may work on Bash shells for programs started from the shell, variables set in those files are not available by default to programs started from the graphical environment in a desktop session.  help.ubuntu.com/community/EnvironmentVariables - SudoSURoot
Onde devo adicionar minha linha específica ?! parte inferior da página .bashrc ?! - Mr.Hyde
@ Mr.Hyde sim, isso é provavelmente um lugar razoável - Michał Šrajer
Por que o segundo é menos portátil? - UniversallyUniqueID
@BharadwajRaju porque, em alguns sistemas UNIX antigos, é possível exportar apenas uma variável já definida. Solaris e HP-UX antigos, por exemplo. - Michał Šrajer


Para definir uma variável de ambiente uma vez, use o export comando no prompt, não em um script de shell:

$ export THEVAR=/example

A variável será definida para o restante da sessão do shell ou até não definida.

Para definir uma variável de ambiente toda vez, use o export comando no .bashrc arquivo (ou o arquivo de inicialização apropriado para o seu shell).

Para definir uma variável de ambiente a partir de um script, use o export comando no script e, em seguida, source o roteiro. Se você executar o script, isso não funcionará.

Para uma explicação da diferença entre sourcing e execução, veja esta resposta: https://superuser.com/questions/176783/what-is-the-difference-between-executing-a-bash-script-and-sourcing-a-bash-script/176788#176788


21
2017-08-27 07:20



Como posso fazê-lo funcionar apenas executando o script? Sem terceirização. - Mithril


Para adicionar permanentemente uma nova variável de ambiente no Ubuntu (testada apenas em 14.04), use os seguintes passos:

  1. Abra um terminal (pressionando CtrlAltT)
  2. sudo -H gedit /etc/environment
  3. Digite sua senha
  4. Edite o arquivo de texto que acabou de abrir:
    por exemplo. se você quiser adicionar FOO=bar, então apenas escreva FOO=bar em uma nova linha
  5. Salve isso
  6. Depois de salvar, faça logout e faça login novamente.
  7. Suas alterações necessárias são feitas.

15
2017-12-07 08:45



Eu limpei sua resposta removendo as partes mais perigosas sobre sudo gedit (Vejo askubuntu.com/questions/270006/…) e chmod 777. O último nunca deve ser feito em um arquivo de configuração do sistema. - muru
Esta é uma resposta correta para certos casos. Todas as sessões, sejam sessões de shell do usuário ou não, receberão o valor das variáveis ​​definidas aqui. É importante notar que, embora isso possa parecer um script de shell, ele não é - ele permite que você apenas defina variáveis ​​de ambiente (vs. usando funções de shell como if ou test) - Tom Harrison Jr
Se bar é uma string, devo colocá-lo entre aspas? Gostar Foo="bar"? - blue_chip
@blue_chip Não, funciona sem aspas. - Click Upvote
@ blue_chip para variáveis ​​de ambiente, tudo é uma string. Você só precisa de cotações quando contiver espaços. - Ruslan


Para que as alterações do ambiente / var continuem após a conclusão do script, você deve usarsource ./script.sh ou a notação abreviada para fonte, ".", como . ./script.sh

O Source irá executar os comandos no script como se você os tivesse digitado ... então isso muda alguns aspectos do script, como sair ... então se o seu script verificar alguma coisa e decidir sair se for falso, por exemplo, via chamando exit 0, terminará sua sessão atual de terminal / shell.


3
2018-03-16 15:09



Essa é uma pergunta muito antiga que já tem uma resposta aceita e algumas outras ... Considere, respondendo perguntas mais recentes por favor ... - NerdOfCode
@NerdOfCode esta resposta resolve um problema que é ainda relevante e nenhuma das outras respostas, incluindo a que foi aceita, menciona, até onde eu posso ver ... Na verdade, existem dois distintivos disponíveis para fornecer boas respostas a perguntas antigas, então isso é encorajado - Zanna


Se você estiver fazendo coisas via script, uma maneira fácil de definir permanentemente a variável de ambiente é colocar a declaração abaixo no seu script,

if [[ ! -d "$MyVar" ]]; then 
    export MyVar="abc"
    echo 'export MyVar="abc"' >> ~/.bashrc
fi

Se você precisa avaliar expressões como pwd, você pode usar isto, por exemplo,

echo "export EIGEN_ROOT=\"$(pwd)/eigen\"" >> ~/.bashrc

1
2017-07-12 02:06