Su Mac 10.11.6, usando GNU bash, versione 3.2.57(1)-release (x86_64-apple-darwin15) il set +a
il comando sembra non funzionare:
script.py
#!/usr/bin/python
import os
print("VAR0 is:", os.environ.get("VAR0")
Comandi:
$ 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
Risposta accettata:
Take away:Sì, set +a
disimposta set -a
ma le variabili non vengono esportate per questo motivo. Ciascuna variabile deve quindi essere annullata o annullata.
L'opzione allexport
(Come set -a
) consente l'esportazione automatica di nuovo e cambiato variabili. Variabili che esistono prima dell'attivazione del set -a
l'opzione non verrà esportata.
Due punti prima del test:
-
La condizione di
set -a
potrebbe essere stampato conshopt -po allexport
.
E potrebbe essere modificato conshopt -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
-
Il metodo shell per testare le variabili d'ambiente consiste nell'esaminare l'output dell'
environment
comando, in realtà ingrep
esso$ env | grep PATH PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
Non c'è bisogno di un programma esterno da Python (che deve essere compilato alla prima chiamata). Puoi ancora usarlo se questo ti rende felice, ma non ce n'è davvero bisogno.
Se l'opzione non è impostata (set +a
). Un nuovo la variabile non essere esportato.
$ unset VAR0
$ VAR0=abc
$ env | grep VAR0
# nothing is printed.
Oppure, se vuoi ancora il tuo programma:
$ ./envtest.py
VAR0 is: None
Se il -a
opzione viene modificata, la var non verrà esportata fino a quando non viene modificata:
$ set -a
$ shopt -po allexport
set -o allexport
$ env | grep VAR0
$ ./envtest.py
VAR0 is: None
Se la variabile cambia:
$ VAR0=bcd
$ env | grep VAR0
VAR0=bcd
$ ./envtest.py
VAR0 is: bcd
Ma la variabile rimarrà nell'ambiente se il set +a
è applicato:
$ set +a
$ env | grep VAR0
VAR0=bcd
$ ./envtest.py
VAR0 is: bcd
Anche se la var viene modificata, fa ancora parte dell'ambiente:
$ VAR0=xyz
$ env | grep VAR0
VAR0=xyz
$ ./envtest.py
VAR0 is: xyz
Finché non viene esportato (rimuovere l'attributo export):
$ declare +x VAR0
Oppure è semplicemente unset
$ env | grep VAR0
VAR0=xyz
$ unset VAR0
$ env | grep VAR0
No, assegnare un valore vuoto non è lo stesso:
$ VAR0=''
$ env | grep VAR0
VAR0=
Che il tuo programma non mostra chiaramente:
$ ./envtest.py
VAR0 is: