Como adiciono variáveis ​​de ambiente?

364

Estou executando o Ubuntu 11.04. Eu uso o terminal para iniciar uma sessão do 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 a última, mas outra chamada para envnão aparece THEVARmais - env | grep THEVARnão retorna nada.

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

Sei que estou fazendo algo errado, sei que deve ser algo simples, mas não consigo encontrar o que.

ATUALIZAÇÃO: O verdadeiro significado da minha pergunta era 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 - não era isso que eu estava perguntando)

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

bufar
fonte
1
Quando definido / exportado em .bashrc, funciona corretamente.
huff 27/08
possível duplicata da variável de ambiente Google Earth e $ BROWSER
Isaiah
1
Que tal THEVAR=/example?
precisa saber é o seguinte
2
O outro é sobre variáveis ​​globais, este não adiciona essa limitação. Eu manteria isso separado.
Lekensteyn

Respostas:

570

Para definir variável apenas para o shell atual:

VARNAME="my value"

Para configurá-lo para o shell atual e todos os processos iniciados no shell atual:

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

Para defini-lo permanentemente para todas as sessões futuras do bash, adicione essa linha ao seu .bashrcarquivo no seu $HOMEdiretório.

Para defini-lo permanentemente e em todo o sistema (todos os usuários, todos os processos), adicione a variável definida no / etc / environment:

sudo -H gedit /etc/environment

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

VARNAME="my value"

Não use a exportpalavra - chave aqui.

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

Michał Šrajer
fonte
29
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
1
@ Mr.Hyde sim, isso é provavelmente um lugar razoável
Michał Šrajer
1
@BharadwajRaju porque em alguns sistemas UNIX antigos, é possível exportar apenas a variável que já está definida. Solaris antigo e HP-UX, por exemplo.
Michał Šrajer 18/03/16
1
Depois de definir a variável de ambiente, como posso visualizá-la rapidamente para garantir que esteja definida?
Rod
1
@Rodecho $myvar
Qwerty
29

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

$ export THEVAR=/example

A variável será configurada para o restante da sessão do shell ou até a desativação.

Para definir sempre uma variável de ambiente, use o exportcomando no .bashrcarquivo (ou o arquivo de inicialização apropriado para seu shell).

Para definir uma variável de ambiente a partir de um script, use o exportcomando no script e, em seguida, sourceo script. Se você executar o script, ele não funcionará.

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

lesmana
fonte
4
Como posso fazê-lo funcionar apenas executando o script? Sem fonte.
Mithril
19

Para adicionar permanentemente uma nova variável de ambiente no Ubuntu (testada apenas na 14.04), use as seguintes etapas:

  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ê deseja adicionar FOO=bar, basta escrever FOO=barem uma nova linha
  5. Salve isso
  6. Depois de salvo, efetue logout e efetue login novamente.
  7. Suas alterações necessárias são feitas.
user355501
fonte
5
Limpei sua resposta removendo os bits mais perigosos sobre sudo gedit(Veja 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, obterão o valor das variáveis ​​definidas aqui. É importante notar que enquanto isso pode parecer um shell script, não é - ele permite que você apenas para definir variáveis de ambiente (vs. usando funções shell como ifou test)
Tom Harrison Jr
Se bar é uma string, devo colocá-la entre aspas? Gosta Foo="bar"?
Novidade
@blue_chip Não, funciona sem aspas.
Click Upvote
4
@blue_chip para variáveis ​​de ambiente, tudo é uma string. Você só precisa de aspas quando contém espaços.
Ruslan
8

Para que as alterações no ambiente / var persistam após a conclusão do script, você deve usar source ./script.shou a notação abreviada da fonte ".", Como. ./script.sh

O Source executará os comandos no script como se você os tivesse digitado ... portanto, ele altera alguns aspectos do script, como sair ... portanto, se o script verificar algo e decidir sair se for falso, por exemplo, via chamada exit 0, ele encerrará sua sessão de terminal / shell atual.

m0bl
fonte
Esta é uma questão muito antiga que já tem uma resposta aceita e alguns outros ... Considere, respondendo a perguntas mais recentes, por favor ...
NerdOfCode
3
@NerdOfCode, esta resposta aborda um problema que ainda é relevante e nenhuma das outras respostas, incluindo a aceita, menciona, até onde eu vejo ... Na verdade, existem dois emblemas disponíveis para fornecer boas respostas a perguntas antigas, por isso este é encorajado
Zanna
1
Exatamente o que eu estava procurando. Eu precisava ver fora do script, as variáveis ​​exportadas do script.
albanx 11/03
5

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

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

Se você precisar avaliar expressões como pwd, poderá usar isso, por exemplo,

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

Eu sei que é muito tarde, mas se você quiser adicionar uma variável de ambiente para todos os usuários (por exemplo, uso de JAVA) - você pode fazer o seguinte:

1) Abra /etc/bash.bashrcusando o nano (você pode usar qualquer editor, eu não prefiro o VIM, pois é o pior quando se trata de facilidade de uso - nada pessoal).

2) Anexe ao arquivo:

export VAR=path export PATH=$PATH:/bin 3) (Melhor se você puder devolver a caixa) - ou simplesmente abra uma nova sessão SSH e confirme usando o comando `env '.

MAS, se você quiser que cada usuário tenha uma configuração separada para isso, faça uma alteração (com script) no .bashrcarquivo ~/.bashrc(ou /home/$USER/se você é novo nos sistemas Linux)

ha9u63ar
fonte