1

我是新手。

我发现了一个关于环境模块的有趣的事情。请看以下流程。

我的linux操作系统是redhat5.8。我已经安装了环境模块 3.2.10, tcl8.6.6,

  1. 源 init/csh 成功。
  2. 我分别写了一个 qq/{61_0, 61_1, 61_2} 模块文件。

以 qq/61_0 为例。

cat 61_0:

\#%Module1.0

set curNameVersion  [module-info name]

set curName [lindex [split $curNameVersion "/"] 0]

set var_name "61_PAT"   

set install_path /soft/qq/61_0

if { [module-info mode load] } {    

    puts stderr "loaded $curNameVersion"

    if { [info exists env($var_name)] } {  

        if { $env($var_name) != $install_path } {  

            puts stderr "rm loaded $curName"

            module unload $curName

        }

    }

}

setenv $var_name $install_path

puts stderr "done 61_0"


.
.

   61_1 modulefile is basically similar to 61_0 except set install_path /soft/qq/61_1 and puts stderr "done 61_1"

   61_2 modulefile is basically similar to 61_0 except set install_path /soft/qq/61_2 and puts stderr "done 61_2"

3.

^Linux^:  module add qq/61_0

loaded qq/61_0

done 61_0


^Linux^:  module add qq/61_1

loaded qq/61_1

rm loaded qq

loaded qq/61_0

done 61_0

done 61_1


^Linux^:  module add qq/61_2

done 61_0

done 61_0

done 61_0

..

...

done 61_0

done 61_0

done 61_2


4. 

^Linux^:  module list

Currently Loaded Modulefiles:

  1) qq/61_0   2) qq/61_1   3) qq/61_2

^Linux^:  echo $_LMFILES_ 

/software/qq/61_0:/software/qq/61_1:/software/qq/61_2

^Linux^:  echo $LOADEDMODULES 

qq/61_0:qq/61_1:qq/61_2

我的问题是:

  1. 不应该为同一个工具qq加载多个版本,当加载另一个版本时,它应该首先模块rm other。
    虽然我在模块文件中有模块卸载,但看起来模块卸载 $curName 语句不起作用
  2. 运行'module add qq/61_1'时,表示先rm加载qq/61_0,再执行qq/61_0模块文件,因为是卸载qq/61_0,所以不应该输出行'loaded qq/61_0 '。但它输出“已加载 qq/61_0”。为什么?
  3. 为什么运行'module add qq/61_2'时有这么多输出'done 61_0'?
  4. echo $ LMFILES和 echo $LOADEDMODULES 已经证明它存在同一个工具的多个版本,如何保持只加载一个版本?

有人可以帮助我吗?提前致谢

4

1 回答 1

1

您描述的问题来自影响模块版本 <= 3.2.10的错误。较新的模块版本 (> 3.2.10) 或类似 RedHat 的 Linux 发行版上的最新“环境模块”包已修复此问题:

使用固定的模块版本,您描述的过程似乎是正确的(在 Fedora 系统上的模块 3.2.10 和更高版本上测试):

$ module add qq/61_0
loaded qq/61_0
done 61_0
$ module add qq/61_1
loaded qq/61_1
rm loaded qq
done 61_0
done 61_1
$ module list
Currently Loaded Modulefiles:
 1) qq/61_1  
$ module add qq/61_2
loaded qq/61_2
rm loaded qq
done 61_1
done 61_2
$ module list
Currently Loaded Modulefiles:
 1) qq/61_2
于 2018-06-23T12:51:01.293 回答