set +a
unsets set -a
, mas as variáveis não são exportadas por causa disso. Cada variável precisa ser exportada ou não definida.
A opção allexport
(Igual a set -a
) permite a exportação automática de variáveis new e changed . Variáveis que existem antes de ativar a opção set -a
não serão exportadas.
Dois pontos antes de testar:
-
A condição de
set -a
pode ser impressa comshopt -po allexport
.
E pode ser alterado comshopt -os allexport
eshopt -ou allexport
.$ shopt -po allexport set +o allexport $ set -a $ shopt -po allexport set -o allexport $ set +a $ shopt -po allexport set +o allexport
-
A maneira do shell de testar variáveis de ambiente é examinar a saída do comando
environment
, na verdade, paragrep
it$ env | grep PATH PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
Não há necessidade de um programa externo do python (que precisa ser compilado na primeira chamada). Você ainda pode usá-lo se isso te faz feliz, mas não há necessidade real disso.
Se a opção não estiver definida ( set +a
). Uma nova variável não será exportada.
$ unset VAR0
$ VAR0=abc
$ env | grep VAR0
# nothing is printed.
Ou, se você ainda quiser o seu programa:
$ ./envtest.py
VAR0 is: None
Se a opção -a
for alterada, o var não será exportado até ser alterado:
$ set -a
$ shopt -po allexport
set -o allexport
$ env | grep VAR0
$ ./envtest.py
VAR0 is: None
Se a variável mudar:
$ VAR0=bcd
$ env | grep VAR0
VAR0=bcd
$ ./envtest.py
VAR0 is: bcd
Mas a variável permanecerá no ambiente se o set +a
for aplicado:
$ set +a
$ env | grep VAR0
VAR0=bcd
$ ./envtest.py
VAR0 is: bcd
Mesmo que o var seja alterado, ainda faz parte do ambiente:
$ VAR0=xyz
$ env | grep VAR0
VAR0=xyz
$ ./envtest.py
VAR0 is: xyz
Até que ele não seja exportado (remova o atributo de exportação):
$ declare +x VAR0
Ou é simplesmente unset
$ env | grep VAR0
VAR0=xyz
$ unset VAR0
$ env | grep VAR0
Não, atribuir um valor vazio não é o mesmo:
$ VAR0=''
$ env | grep VAR0
VAR0=
Qual seu programa não mostra isso claramente:
$ ./envtest.py
VAR0 is: