modulefile - при выгрузке модуля не происходит сброс переменных окружения - PullRequest
2 голосов
/ 08 июля 2011

У меня очень простой файл модуля:

#%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

Согласно справочной странице 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 ]

1 голос
/ 23 июня 2018

Более новые версии модулей (> = 4.0) корректно выгружают этот файл модуля полного пути.

В более старых версиях команда module unload не полностью соответствует файлу модуля полного пути, переданному в командной строке, с текущимзагруженный модуль.В результате модуль не выгружается.

Воспроизводимая проблема в более старой версии (<4.0): </p>

$ 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.
0 голосов
/ 21 июля 2011

Это, очевидно, работает как задумано: http://sourceforge.net/tracker/?func=detail&aid=2384340&group_id=15538&atid=115538

Кажется, вы должны запустить module unload example_modulefile без указания полного пути к файлу модуля.

...