1

setenv卸载模块时,使用该命令在环境模块中覆盖的环境变量未设置。文档中说可以恢复环境变量,但是没有提供方法。

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

#%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
}

例如我得到:

$ export FOO=bar
$ module load use.own && module load test
$ echo $FOO
123
$ module unload test
$ echo $FOO

$

有没有恢复原值的方法FOO

4

1 回答 1

1

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

#%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 中发生了变化。

于 2021-09-21T19:26:37.730 回答