【问题标题】:Using bash variables inside of modulefiles在模块文件中使用 bash 变量
【发布时间】:2021-05-19 20:03:18
【问题描述】:

我正在尝试编写一系列modulefiles,可用于在集群设置中加载安装在每个用户帐户下的软件。由于软件是在相似的路径下按人安装的,直到用户名发生变化,我试图在模块文件中动态设置基本路径值。

例如,如果我可以使用绝对路径,那么我会像这样设置BASEPATH

#%Module1.0#####################################################################
##
## libevent 2.1.11

set     app libevent
set     version 2.1.11
module-whatis   "loads the necessary `$app-$version' library paths"

set BASEPATH /usr/local/packages/dev/$app/$version

prepend-path    LD_LIBRARY_PATH     $BASEPATH/lib
prepend-path    LD_RUN_PATH             $BASEPATH/lib
prepend-path --delim " " LDFLAGS "-L$BASEPATH/lib"
prepend-path --delim " " CPPFLAGS "-I$BASEPATH/include"
prepend-path --delim " " CFLAGS "-I$BASEPATH/include"

但是,就我而言,我需要 BASEPATH 变量:

set BASEPATH /home/${USER}/software/$app/$version

$USER 将扩展为当前用户名。

不幸的是,在加载模块时,我收到:

libevent/2.1.11(15):ERROR:102: Tcl command execution failed: 
set BASEPATH /home/${USER}/software/$app/$version

【问题讨论】:

    标签: bash environment-variables modulefile


    【解决方案1】:

    原来bash变量可以通过使用TCL语言的env array given by $::env()modulefiles中访问。

    所以,就我而言,我会使用:

    set BASEPATH /home/$::env(USER)/software/$app/$version
    

    或者,等价的,

    set BASEPATH $::env(HOME)/software/$app/$version
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-24
      • 1970-01-01
      • 2011-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多