Использование переменных bash внутри файлов модулей
Я пытаюсь написать серию
modulefiles
который можно использовать для загрузки программного обеспечения, установленного под каждой учетной записью пользователя в настройках кластера. Поскольку программное обеспечение устанавливается на человека по аналогичным путям, вплоть до изменения имени пользователя, я пытаюсь динамически установить значение базового пути в файле модуля.
Например, если бы я мог использовать абсолютный путь, я бы установил примерно так:
#%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
1 ответ
Получается что
bash
переменные доступны в
modulefiles
используя языка TCL, массив envзаданный
$::env()
.
Итак, в моем случае я бы использовал:
set BASEPATH /home/$::env(USER)/software/$app/$version
или, что то же самое,
set BASEPATH $::env(HOME)/software/$app/$version