如何解决在模块文件中使用 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
解决方法
原来可以使用 TCL 语言的 env array given by $::env()
在 bash
中访问 modulefiles
变量。
所以,就我而言,我会使用:
set BASEPATH /home/$::env(USER)/software/$app/$version
或者等价地
set BASEPATH $::env(HOME)/software/$app/$version
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。