Configurando variáveis de ambiente do Linux

9

Estou executando o Red Hat Enterprise Linux 5; Eu estou sempre usando o comando de exportação para definir variáveis de ambiente.

Existem outras maneiras de definir variáveis de ambiente e quais são as vantagens / desvantagens delas?

    
por George2 20.05.2010 / 19:08

4 respostas

15

Este é um trecho da página do manual do Bash:

export [-fn] [name[=word]] ...
export -p
The supplied names are marked for automatic export to the environment of subsequently executed commands. If the -f option is given, the names refer to functions...

Se você precisar apenas da variável no ambiente atual, não será necessário usar a exportação.

var=value

Editar:

Sem exportação: somente ambiente atual. Com exportação: ambiente atual e ambientes filho.

Aqui está uma demonstração do efeito da exportação na disponibilidade de uma variável em um ambiente filho e que as alterações no ambiente filho não afetam o pai:

$ var1=123
$ export var2=456
$ echo "parent [$var1] [$var2] [$var3]"
parent [123] [456] []
$ var3=789 bash -c 'echo "child [$var1] [$var2] [$var3]"; var1=111; var2=222; var3=333; echo "child [$var1] [$var2] [$var3]"'
child [] [456] [789]
child [111] [222] [333]
$ echo "parent [$var1] [$var2] [$var3]"
parent [123] [456] []

Após o primeiro eco ( echo "parent..." ), você verá "123" e "456" porque ambos, var1 e var2 , estão ativos no ambiente atual. Você não vê um valor para var3 porque ainda não está definido.

Após a linha que inicia " var3=... ", você não vê um valor para var1 porque não foi exportado. Você faz ver um valor para var2 porque foi exportado. Você vê um valor para var3 porque foi definido para o ambiente filho somente .

( bash -c é equivalente a executar um script com o conteúdo do argumento para a opção -c . Um script ou outro executável ou, neste caso, o argumento para bash -c se torna um filho do ambiente atual que, como resultado, é claro, o pai da criança.)

No "script" os valores da variável são alterados. Agora, gera esses novos valores.

Quando o "script" for concluído, a execução retornará ao ambiente pai (a linha de comando, neste caso). Após o último eco, você vê os valores originais porque as alterações feitas no ambiente filho não afetam o pai.

    
por 20.05.2010 / 19:25
3

Você diz que

I am always using export command to set environment variable

Pela maneira como você redigiu isso, parece que você está realmente tentando perguntar como você faz uma variável ambiental persistir. Para isso, é necessário colocar sua instrução export VAR="foo" em seu arquivo $ HOME / .bash_profile (se você estiver usando o bash). Se você quiser que a variável de ambiente persista para todos os usuários, exceto o root, inclua-o em / etc / profile. Se você quiser que ele seja adicionado para o usuário root também, configure-o em /root/.bash_profile.

Isso funcionará para todos os shells de login, onde o bash é o shell de escolha. Para shells não de login, você precisa usar .bashrc. Eu não tenho idéias para oferecer para outras conchas: D

    
por 20.05.2010 / 19:44
1

A exportação é a maneira mais simples de fazer isso, então por que não deixar por aí?

export VARIABLE=value    # for Bourne, bash, and similar shells
setenv VARIABLE value    # for csh and similar shells
    
por 20.05.2010 / 19:14
1

Você também pode fazer algo assim:

VAR=val application

Por exemplo:

LANG=C ls --help

saída em inglês.

LANG=pl_PL ls --help

saída em polonês (se disponível).

No passado, você não podia exportar VAL = val. Você teve que

VAL=val; export VAL
    
por 20.05.2010 / 19:31