在模块文件中使用 bash 变量



我正在尝试编写一系列可用于在群集设置中加载每个用户帐户下安装的软件的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

事实证明,通过使用$::env()给出的 TCL 语言的 env 数组,可以在modulefiles中访问bash变量。

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

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

或者,等效地,

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

最新更新