Na Macu 10.11.6 pomocí GNU bash, verze 3.2.57(1)-release (x86_64-apple-darwin15) set +a
Zdá se, že příkaz nefunguje:
script.py
#!/usr/bin/python
import os
print("VAR0 is:", os.environ.get("VAR0")
Příkazy:
$ VAR0=abc
$ ./script.py
('VAR0 is:', None) # expected
$ set -a
$ VAR0=abc
$ ./script.py
('VAR0 is:', 'abc') # expected, VAR0 has been exported to the environment and script.py has access to it
$ set +a
$ VAR0=def
$ ./script.py
('VAR0 is:', 'def') # <= unexpected
Přijatá odpověď:
Take away:Ano, set +a
unsets set -a
ale proměnné se kvůli tomu nestanou neexportovanými. Každou proměnnou je pak třeba zrušit exportování nebo zrušit nastavení.
Možnost allexport
(Stejné jako set -a
) umožňuje automatický export nových a změněno proměnné. Proměnné, které existují před aktivací set -a
možnost nebude exportována.
Dva body před testováním:
-
Podmínka
set -a
lze vytisknout pomocíshopt -po allexport
.
A může být změněno pomocíshopt -os allexport
ashopt -ou allexport
.$ shopt -po allexport set +o allexport $ set -a $ shopt -po allexport set -o allexport $ set +a $ shopt -po allexport set +o allexport
-
Shell způsob, jak testovat proměnné prostředí, je prozkoumat výstup
environment
ve skutečnosti dogrep
to$ env | grep PATH PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
Není potřeba externí program z pythonu (který vyžaduje kompilaci při prvním volání). Můžete jej stále používat, pokud vám to dělá radost, ale není to ve skutečnosti potřeba.
Pokud možnost není nastavena (set +a
). Nové proměnná nebude být exportován.
$ unset VAR0
$ VAR0=abc
$ env | grep VAR0
# nothing is printed.
Nebo, pokud stále chcete svůj program:
$ ./envtest.py
VAR0 is: None
Pokud -a
změníte, var nebude exportována, dokud nebude změněna:
$ set -a
$ shopt -po allexport
set -o allexport
$ env | grep VAR0
$ ./envtest.py
VAR0 is: None
Pokud se proměnná změní:
$ VAR0=bcd
$ env | grep VAR0
VAR0=bcd
$ ./envtest.py
VAR0 is: bcd
Ale proměnná zůstane v prostředí, pokud set +a
je použito:
$ set +a
$ env | grep VAR0
VAR0=bcd
$ ./envtest.py
VAR0 is: bcd
I když se var změní, je stále součástí prostředí:
$ VAR0=xyz
$ env | grep VAR0
VAR0=xyz
$ ./envtest.py
VAR0 is: xyz
Dokud nebude exportován (odstraňte atribut export):
$ declare +x VAR0
Nebo je jednoduše unset
$ env | grep VAR0
VAR0=xyz
$ unset VAR0
$ env | grep VAR0
Ne, přiřazení prázdné hodnoty není totéž:
$ VAR0=''
$ env | grep VAR0
VAR0=
Což váš program tak jasně neukazuje:
$ ./envtest.py
VAR0 is: