Pada Mac 10.11.6, menggunakan GNU bash, versi 3.2.57(1)-release (x86_64-apple-darwin15) set +a
perintah tampaknya tidak berfungsi:
script.py
#!/usr/bin/python
import os
print("VAR0 is:", os.environ.get("VAR0")
Perintah:
$ 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
Jawaban yang Diterima:
Ambil:Ya, set +a
unsets set -a
tetapi variabel tidak menjadi tidak diekspor karena itu. Setiap variabel kemudian harus tidak diekspor atau tidak disetel.
Opsi allexport
(Sama seperti set -a
) memungkinkan ekspor otomatis baru dan berubah variabel. Variabel yang ada sebelum mengaktifkan set -a
opsi tidak akan diekspor.
Dua poin sebelum pengujian:
-
Kondisi
set -a
bisa dicetak denganshopt -po allexport
.
Dan bisa diganti denganshopt -os allexport
danshopt -ou allexport
.$ shopt -po allexport set +o allexport $ set -a $ shopt -po allexport set -o allexport $ set +a $ shopt -po allexport set +o allexport
-
Cara shell untuk menguji variabel lingkungan adalah dengan memeriksa output dari
environment
perintah, sebenarnya kegrep
itu$ env | grep PATH PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
Tidak perlu program eksternal dari python (yang perlu dikompilasi pada panggilan pertama). Anda masih dapat menggunakannya jika itu membuat Anda bahagia, tetapi sebenarnya tidak perlu untuk itu.
Jika opsi tidak disetel (set +a
). baru variabel akan tidak diekspor.
$ unset VAR0
$ VAR0=abc
$ env | grep VAR0
# nothing is printed.
Atau, jika Anda masih menginginkan program Anda:
$ ./envtest.py
VAR0 is: None
Jika -a
opsi diubah, var tidak akan diekspor sampai diubah:
$ set -a
$ shopt -po allexport
set -o allexport
$ env | grep VAR0
$ ./envtest.py
VAR0 is: None
Jika variabel berubah:
$ VAR0=bcd
$ env | grep VAR0
VAR0=bcd
$ ./envtest.py
VAR0 is: bcd
Tetapi variabel akan tetap berada di lingkungan jika set +a
diterapkan:
$ set +a
$ env | grep VAR0
VAR0=bcd
$ ./envtest.py
VAR0 is: bcd
Bahkan jika var diubah, itu masih merupakan bagian dari lingkungan:
$ VAR0=xyz
$ env | grep VAR0
VAR0=xyz
$ ./envtest.py
VAR0 is: xyz
Sampai tidak diekspor (hapus atribut ekspor):
$ declare +x VAR0
Atau hanya unset
$ env | grep VAR0
VAR0=xyz
$ unset VAR0
$ env | grep VAR0
Tidak, menetapkan nilai kosong tidak sama:
$ VAR0=''
$ env | grep VAR0
VAR0=
Yang mana program Anda tidak menunjukkannya dengan jelas:
$ ./envtest.py
VAR0 is: