设置了两个变量x
y
最后通过export
导入了y
,但没有对x
做同样的操作
在当前shell
中,通过echo可以读取x
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
总结:
- 系统环境变量到处可以读取
- 用户环境变量,针对当前用户生效,子进程可以读取到,如果是临时的,只能当前进程及子进程可以读取
- 用户自定义变量,针对当前进程生效