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