首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用环境模块覆盖和恢复bash中的环境变量

使用环境模块覆盖和恢复bash中的环境变量
EN

Stack Overflow用户
提问于 2021-09-21 19:08:18
回答 1查看 106关注 0票数 1

卸载模块时,将取消设置在环境模块中使用setenv命令覆盖的环境变量。在文档it is stated that environment variables can be restored中,但没有提供任何方法。

我尝试使用条件执行,但以下模块(~/privatemodules/test)无法恢复环境变量FOO

代码语言:javascript
复制
#%Module########################################################################
##
## test modulefile
##
  proc ModulesHelp { } {
  puts stderr "This module modifies an environment variable FOO."
}

module-whatis "Modify environment varible FOO"

if { [module-info mode load] } {
  setenv ORIGINAL_FOO $::env(FOO)
  setenv FOO "123"
} elseif { [module-info mode unload] } {
  setenv FOO $::env(ORIGINAL_FOO)
  unsetenv ORIGINAL_FOO
}

例如,我得到:

代码语言:javascript
复制
$ export FOO=bar
$ module load use.own && module load test
$ echo $FOO
123
$ module unload test
$ echo $FOO

$

有没有办法恢复FOO的原始值?

EN

回答 1

Stack Overflow用户

发布于 2021-09-21 19:26:38

在文档中可以找到解决方案。unsetenv使用额外的参数将环境变量设置为新值。所以模块文件应该是:

代码语言:javascript
复制
#%Module########################################################################
##
## test modulefile
##
  proc ModulesHelp { } {
  puts stderr "This module modifies an environment variable FOO."
}

module-whatis "Modify environment varible FOO"

if { [module-info mode load] } {
  setenv ORIGINAL_FOO $::env(FOO)
  setenv FOO "123"
} elseif { [module-info mode unload] } {
  unsetenv FOO $::env(ORIGINAL_FOO)
}

这在版本5中发生了变化。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69274347

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档