Python中设置的环境变量在当前shell环境生效
2024-04-01
需求: 我需要使用python写一个自动化脚本,即解析maven项目,根据项目的语言版本设置JAVA_HOME环境变量。
例子: 当前maven项目需要JDK17编译,我需要将JAVA_HOME设置为/usr/lib/jdk17
然而当我解析完项目所需JDK版本后,设置JAVA_HOME,并且需要及时生效成了一个问题
我理想的自动化步骤:
- 执行
python setenv.py {project_path}自动设置JAVA_HOME为该项目适配的JDK环境 - 执行
mvn test可以使用步骤1设置好的JAVA_HOME
因为Python中通过os.environment设置的环境变量是属于当前python进程的环境变量,不会在父shell中生效。
我想到过的无效解决方法:
- 使用subprocess.run执行export JAVA_HOME,此方法依旧是由子进程执行,不会生效
- 追加export JAVA_HOME到~/.bashrc,此方法会在当前用户下次登录shell生效,不会立即生效
有效的解决方法:
要解决这个问题,就是需要在父shell中设置环境变量,不能开启子进程,也不能在子shell中执行。
我这边后面写了个shell脚本setenv.sh,先在shell脚本中执行python脚本,将解析出的JAVA_HOME输出到.env文件,格式为JAVA_HOME=/usr/lib/JDK17,然后在shell脚本中去读取这个文件,然后export JAVA_HOME。
最后的自动化步骤:
1 | . setenv.sh {project_path} |
注意前面的.
不能直接运行setenv.sh,这样还是设置在子shell中,不会在父shell生效。
- 文章地址: https://tnbai.com/posts/1632314250.html
- 版权声明: 本文采用CC BY-NC-ND 4.0 许可协议。转载请注明出处。