Quais são as variáveis de ambiente por padrão?

0

Ao iniciar um processo bash shell, quais são as variáveis de ambiente padrão, exceto aquelas especificadas no arquivo de inicialização?

É correto que algumas variáveis internas ou sh embutidas (listadas no " Variáveis Bourne Shell " e " Variáveis de Bash " seções do Bash manual) são variáveis de ambiente padrão enquanto outras variáveis bash ou sh builtin não são? Que tipos de variáveis bash ou sh builtin são variáveis de ambiente padrão?

Em a definição POSIX de variáveis de ambiente , parece que todas ou a maioria das variáveis incorporadas no bash são variáveis de ambiente por padrão, mas não tenho certeza.

    
por Tim 10.12.2016 / 17:10

1 resposta

3

Um processo normalmente herda variáveis de envios do seu processo pai. A menos que os programas (por exemplo, shells) tenham outras convenções, não há variável de ambiente "padrão".

Se você está curioso, você pode usar o comando env -i para limpar o ambiente e usar printenv para mostrar o ambiente. Alguns exemplos:

$ env -i printenv

$ env -i sh -c printenv
PWD=/home/peter
SHLVL=1
_=/usr/bin/printenv

$ echo printenv | env -i sh
PWD=/home/peter
SHLVL=1
_=/usr/bin/printenv

$ env -i sh --login -c printenv
...all kinds of variables from login scripts...
LANG=en_US.UTF-8
PWD=/home/peter
SHLVL=1
PATH=/usr/local/bin:/usr/bin:...
LESSOPEN=|/usr/bin/lesspipe.sh %s
_=/usr/bin/env

O manual do bash (1) documenta algumas dessas variáveis, mas infelizmente não fornece uma resposta definitiva sobre se essas variáveis environment estão sempre definidas ou não.

Outras variáveis no bash podem ser encontradas de maneira similar:

$ env -i -c set
BASH=/usr/bin/sh
...
BASH_VERSION='4.4.5(1)-release'
...
SHLVL=1
TERM=dumb
UID=1000
_=sh

Se você precisar confiar em qualquer uma dessas variáveis, é melhor verificar o manual do bash . Em particular:

Agora, já que você tem um shell bash aberto. Você gostaria de saber se uma determinada variável está disponível para subshells ou não. Para isso, o declare -p NAME... builtin pode ser usado para "exibir os atributos e o valor de cada NAME. Exemplo:

$ declare -p PWD
declare -x PWD="/home/peter"
$ declare -p foo
bash: declare: foo: not found
$ foo=bar
$ declare -p foo
declare -- foo="bar"

O atributo -x marca uma variável como exportada , o que significa que os subprocessos veem essa variável. Para fazer isso para variáveis existentes, você pode usar o export builtin:

$ export foo
$ declare -p foo
declare -x foo="bar"

No Bash, definir uma variável e disponibilizá-la para subprocessos pode ser combinado:

$ export foo=bar
    
por 10.12.2016 / 19:53