Environment Modules - 在工具生命周期的重要性

Posted 王万林 Ben

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Environment Modules - 在工具生命周期的重要性相关的知识,希望对你有一定的参考价值。

Environment Modules - 在工具生命周期的重要性



前言

在CAD环境中,工具有一个寿命周期,如工具上架,变更维护,下架等。
从管理员角度,如何能快速实现(浅)侵入式的定制开发,实现想要的操作呢?

本文将以加载/卸载来控制alias设置不同的值为例子,说明modulefile可灵活定制的重要性。


一、查看资料

官网资料 module-info option [info-args]

二、实现

效果

[thesre@centos8 ~]$ which mavail
mavail:          aliased to module avail !*
[thesre@centos8 ~]$ module load gcc/10.2.0
[thesre@centos8 ~]$ which mavail #加载后查看mavail别名,设置好了期望的值。
mavail:          aliased to /path/to/module_avail_command
[thesre@centos8 ~]$ module unload gcc/10.2.0
[thesre@centos8 ~]$ which mavail #卸载后查看mavail别名,恢复了看到没?
mavail:          aliased to module avail !*

实现

[thesre@centos8 ~]$ cat /environment_modules/opensource/gcc/10.2.0
#%Module1.0

# Author      : 王万林
# Date        : 01/12/2020
# Description : Modulefile for Environment Modules. 
# License     : All rights reserved.

set curMod           [ module-info  name              ]
set version_abs_path [ info script                    ]
set version          [ file tail    $version_abs_path ]
set tool_abs_path    [ file dirname $version_abs_path ]
set tool             [ file tail    $tool_abs_path    ]
set vendor_abs_path  [ file dirname $tool_abs_path    ]
set vendor           [ file tail    $vendor_abs_path  ]

# Prevent from 'module load'-ing two versions from within the same tool directory at one time. 
if { [ module-info mode load ] } {
    if { [ info exists env(_LMFILES_) ] } {
        if { [ regexp $tool_abs_path/ $env(_LMFILES_) ] && ! [ regexp $vendor/$curMod $env(_LMFILES_) ] } {
            # Another version of this tool was loaded. Removing it...
            module remove $tool
        }
    }
}

# Help messages.
proc ModuleHelp { } {
    puts stderr "Any questions, please contact TheSRE."
}

# Information to display when perform 'module dipslay $curMod'.
module-whatis "Modulefile for $vendor/$tool/$version"

# PATH
prepend-path PATH /apps/$vendor/$tool/$version/bin

# set alias on module load, and 
# unset alias & set another value to it on module unload
if { [ module-info mode load ] } {
    # 加载时设置mavail别名为/path/to/module_avail_command
    set-alias mavail { /path/to/module_avail_command } 
} elseif { [ module-info mode remove ] } {
    # 卸载时通过在终端直接执行来设置mavail别名为module avail !*
    # 请注意,要输出到标准输出,以便被eval执行,作用于terminal
    puts stdout {alias mavail module avail '\\!*';} 
}

总结

以上就是今天要讲的内容。

以上是关于Environment Modules - 在工具生命周期的重要性的主要内容,如果未能解决你的问题,请参考以下文章

Environment Modules 简明教程

CAD - Environment Modules(module avail等)命令加速

查看修改添加环境变量的工具——Rapid Environment Editor

This usually happens because your environment has changed since running `npm install`.

node-sass报错(Node Sass could not find a binding for your current environment)

React Native + Jest EMFILE:打开文件过多错误