0

我正在尝试编写一系列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

where$USER将扩展到当前用户名。

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

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

1 回答 1

0

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

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

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

或者,等效地,

set BASEPATH $::env(HOME)/software/$app/$version
于 2021-05-19T20:34:50.707 回答