設定了兩個變量 x y export y x
最後通過
導入了
,但沒有對
做同樣的操作
在目前
shell
中,通過echo可以讀取 x
y
的值 [root@izbp152ke14timzud0du15z ~]# x="enable"
[root@izbp152ke14timzud0du15z ~]# echo $x
enable
[root@izbp152ke14timzud0du15z ~]# y="disable"
[root@izbp152ke14timzud0du15z ~]# echo $y
disable
[root@izbp152ke14timzud0du15z ~]# export y
這是一段Python腳本
read.py
import os
import time
print(os.getenv("x"))
print(os.getenv("y"))
time.sleep(1800)
執行腳本後輸出,
x
的值沒有讀取出來,
y
的值被讀取出來了
[root@izbp152ke14timzud0du15z ~]# python read.py
None
disable
檢視下Python程序
[root@izbp152ke14timzud0du15z ~]# ps -ef|grep read
root 2 0 0 Nov01 ? 00:00:00 [kthreadd]
root 24506 23905 0 11:19 pts/2 00:00:00 python read.py
root 25258 20532 0 11:20 pts/1 00:00:00 grep --color=auto read
檢視下Python的父程序
[root@izbp152ke14timzud0du15z ~]# ps -ef|grep 23905
root 23905 23903 0 10:50 pts/2 00:00:00 -bash
root 24506 23905 0 11:19 pts/2 00:00:00 python read.py
root 26513 20532 0 11:21 pts/1 00:00:00 grep --color=auto 23905
再重新開一個終端,執行腳本後,
x
y
的值都沒有被讀取出來
[root@izbp152ke14timzud0du15z ~]# python read.py
None
None
我管
x
為使用者自定義變量,
y
為使用者環境變量(臨時),子程序可以讀取目前使用者環境變量,但是無法讀取使用者自定義變量,使用者自定義變量隻在目前程序中生效
設定使用者永久環境變量
vim ~/.bash_profile
export z=auto
重新整理環境變量
[root@izbp152ke14timzud0du15z ~]# source ~/.bash_profile
改下Python腳本
import os
import time
print(os.getenv("x"))
print(os.getenv("y"))
print(os.getenv("z"))
time.sleep(1800)
再開一個新的終端執行Python腳本,
[root@izbp152ke14timzud0du15z ~]# python read.py
None
None
auto
通過ssh再重新登入一個其他使用者執行一下Python腳本
結果是什麼值都讀取不到,即使是
z
也隻是其他使用者環境變量
[pl@izbp152ke14timzud0du15z ~]$ python /root/read.py
None
None
None
如何設定讓所有使用者都可以讀取到的變量呢,那就是系統環境變量了
vim /etc/profile
export xyz="hello"
重新整理檔案内容
source /etc/profile
更新下Python腳本
import os
import time
print(os.getenv("x"))
print(os.getenv("y"))
print(os.getenv("z"))
print(os.getenv("xyz"))
time.sleep(1800)
其它已經登入的使用者,需要重新登入,然後執行Python腳本,可以讀取系統環境變量
xyz
[pl@izbp152ke14timzud0du15z ~]$ python /root/read.py
None
None
None
hello
總結:
- 系統環境變量到處可以讀取
- 使用者環境變量,針對目前使用者生效,子程序可以讀取到,如果是臨時的,隻能目前程序及子程序可以讀取
- 使用者自定義變量,針對目前程序生效