梳理下Linux系统变量,用户环境变量,用户自定义变量

设置了两个变量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

总结:

  1. 系统环境变量到处可以读取
  2. 用户环境变量,针对当前用户生效,子进程可以读取到,如果是临时的,只能当前进程及子进程可以读取
  3. 用户自定义变量,针对当前进程生效
上一篇:XCode中如何使用事务


下一篇:Linux下误删文件的解决之道