【问题标题】:why run module unload failed in modulefile?为什么在模块文件中运行模块卸载失败?
【发布时间】:2017-07-18 17:48:15
【问题描述】:

我是新手。

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

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

  1. source 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 已经证明它存在同一个工具的多个版本, 如何保持只加载一个版本?

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

【问题讨论】:

    标签: module environment modulefile


    【解决方案1】:

    您描述的问题来自 a bug 影响模块版本 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-07
      • 1970-01-01
      • 2017-04-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多