
Я переключаюсь между проектами путей/кода. В каждом месте у меня разные модули. Для этого есть скрипт настройки, который изменяет, что использовать. Это делается с помощью инструмента 'module'.
ПРИМЕЧАНИЕ: modules
— это пакет для управления средой, позволяющий перенастраивать ее таким образом, чтобы на ней присутствовали $PATH
или не присутствовали различные приложения.
Проблема в том, что каждый раз при обновлении пути к модулю в файл добавляется новая запись.~/.modulesbeginenv
#!/user/bin/env tcsh
module unuse $path1
module use $path2
module add project_module
Этот короткий пример добавляет две строки ~/.modulebeginenv
при каждом вызове. Сначала MODULEPATH='paths'
без $path1
, а затем MODULEPATH='paths'
с $path2
.
Мне кажется странным, что изменение добавляется, а не обновляется. Есть ли какая-то конфигурация для управления этим или какой-то другой способ решить эту проблему?
решение1
Глядя на использование, поведение, которое вы видите, похоже на то, что я ожидал бы от use
подкоманды.
module use [-a |--append] directory [directory...]
По умолчанию эта подкоманда добавляет каталог к
$MODULEPATH
переменной окружения. Если используется аргумент-a
или--append
, то каталог будет добавлен к$MODULEPATH
.
С помощью этой подкоманды unuse
будут удалены все указанные вами пути.
module unuse directory [directory...]
Удалите каталог из переменной среды $MODULEPATH.
Если вы хотите полностью переопределить переменную, вы всегда можете воспользоваться командой setenv
.
setenv variable value
Установите переменную окружения в значение.
setenv
Команда также изменит окружение процесса. Ссылка с использованием ассоциативного массива env Tcl будет ссылаться на изменения, внесенные с помощьюsetenv
команды. Изменения, внесенные с использованием ассоциативного массива env Tcl, НЕ изменят переменную окружения пользователя, как команда setenv. Изменение окружения, внесенное таким образом, повлияет только на процесс разбора модуля. Командаsetenv
также полезна для изменения окружения до командыexec
илиsystem
. Когда modulefile выгружается,setenv
становитсяunsetenv
. Если переменная окружения была определена, она будет перезаписана при загрузке modulefile. Последующая выгрузка сбросит переменную окружения - предыдущее значение не может быть восстановлено! (Если вы не обработаете это явно ... см. ниже.)...