Использование переменных 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
Другие вопросы по тегам