modulefile - при выгрузке модуля не происходит сброс переменных окружения
У меня очень простой файл модуля:
#%Module1.0#####################################################################
puts stderr "Loading personal environment"
proc ModulesHelp { } {
puts stderr "\tLoads personal environment"
puts stderr ""
}
setenv MYTEMPVAR sometext
И вот моя командная строка:
> env | grep MYTEMPVAR
> module load ~/wa/example_modulefile
Loading personal environment
> env | grep MYTEMPVAR
MYTEMPVAR=sometext
> module unload ~/wa/example_modulefile
> env | grep MYTEMPVAR
MYTEMPVAR=sometext
Согласно man-файлу modulefile, команда unload модуля должна была превратить все setenv в unsetenv, но, похоже, она не работает. Кто-нибудь знает, что я могу делать здесь не так?
Дополнительная информация:
> module --version
VERSION=3.2.6
DATE=2007-02-14
AUTOLOADPATH=undef
BASEPREFIX="/usr/share"
BEGINENV=99
CACHE_AVAIL=undef
DEF_COLLATE_BY_NUMBER=undef
DOT_EXT=""
EVAL_ALIAS=1
HAS_BOURNE_FUNCS=1
HAS_BOURNE_ALIAS=1
HAS_TCLXLIBS=undef
HAS_X11LIBS=1
LMSPLIT_SIZE=undef
MODULEPATH="/company/tech/tools/modules/sites/$SITE/Linux/:/company/tech/tools/modules/projects"
MODULES_INIT_DIR="/usr/share/Modules/init"
PREFIX="/usr/share/Modules"
TCL_VERSION="8.4"
TCL_PATCH_LEVEL="8.4.19"
TMP_DIR="/tmp"
USE_FREE=undef
VERSION_MAGIC=1
VERSIONPATH=undef
WANTS_VERSIONING=0
WITH_DEBUG_INFO=undef
Hello World
> env | grep SHELL
SHELL=/bin/tcsh
Для тех, кто не знаком с модульными файлами (они не кажутся такими популярными):
- modulefile - это простой фрагмент кода, который устанавливает или добавляет записи в переменную PATH, MANPATH или другие переменные среды.
- modulefiles скрывает понятие различных типов оболочек
- Файлы модулей написаны на языке командных инструментов Tcl и интерпретируются программой modulecmd через пользовательский интерфейс модуля.
2 ответа
По-видимому, это работает как задумано: http://sourceforge.net/tracker/?func=detail&aid=2384340&group_id=15538&atid=115538
Кажется, вы должны бежать module unload example_modulefile
без указания полного пути к файлу модуля.
Более новые версии модулей (>= 4.0) правильно выгружают этот файл модуля полного пути.
В более старых версиях module unload
команда не совпадает с полным файлом модуля пути, переданным в командной строке, с текущим загруженным модулем. В результате ни один модуль не выгружается.
Воспроизводимая проблема в более старой версии (< 4.0):
$ module -V | grep ^VERSION=
VERSION=3.2.11
$ module load ~/modules/test
$ module list
Currently Loaded Modulefiles:
1) /home/user/modules/test
$ module unload ~/modules/test
$ module list
Currently Loaded Modulefiles:
1) /home/user/modules/test
Как сказал злой оттон, в более старой версии модуля для выгрузки этого файла модуля необходимо использовать короткое имя модуля.
$ module list
Currently Loaded Modulefiles:
1) /home/user/modules/test
$ module unload test
$ module list
No Modulefiles Currently Loaded.
Ожидаемое поведение, полученное в последней версии модуля:
$ module -V
Modules Release 4.1.3 (2018-06-18)
$ module load ~/modules/test
$ module list
Currently Loaded Modulefiles:
1) /home/user/modules/test
$ module unload ~/modules/test
$ module list
No Modulefiles Currently Loaded.