为什么在modulefile中运行模块卸载失败?

为什么在modulefile中运行模块卸载失败?,module,environment,modulefile,Module,Environment,Modulefile,我是个新手 我发现了一件关于环境模块的有趣事情。 请参阅以下流程 我的linux操作系统是redhat5.8。 我已经安装了环境模块3.2.10、tcl8.6.6、 源初始化/csh成功 我分别写了一个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

我是个新手

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

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

  • 源初始化/csh成功
  • 我分别写了一个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
    
    我的问题是:

  • 不应为同一工具加载多个版本, 加载其他版本时,应先模块rm other。
    虽然modulefile中有moduleunload,但看起来moduleunload$curName语句不起作用
  • 当运行“模块添加qq/61_1”时,意味着它将首先rm加载qq/61_0, 然后执行qq/61_0 modulefile, 因为它是为qq/61_0卸载的,所以不应该输出行“loaded qq/61_0”。 但它输出“已加载qq/61_0”。 为什么?
  • 为什么运行“模块添加qq/61_2”时会有这么多输出“完成61_0”
  • echo$LMFILES和echo$LOADEDMODULES已证明,同一工具存在多版本, 如何保持只加载一个版本
  • 有人能帮我吗?
    提前感谢

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