
Estou alternando entre caminhos/projetos de código. Em cada local tenho módulos diferentes. Para lidar com isso existe um script de configuração que modifica o que usar. Isso é tratado com a ferramenta 'módulo'.
OBSERVAÇÃO: modules
é um pacote para gerenciamento do ambiente permitindo que ele seja reconfigurado para que diversas aplicações estejam presentes $PATH
ou não.
O problema é que cada vez que um caminho de módulo é atualizado, uma nova entrada é adicionada ao arquivo~/.modulesbeginenv
#!/user/bin/env tcsh
module unuse $path1
module use $path2
module add project_module
Este pequeno exemplo adiciona duas linhas ~/.modulebeginenv
a cada chamada. Primeiro MODULEPATH='paths'
sem $path1
e depois MODULEPATH='paths'
com $path2
.
Parece-me estranho que a alteração seja anexada em vez de atualizada. Existe alguma configuração para controlar isso ou alguma outra forma de resolver?
Responder1
Observando o uso, o comportamento que você está vendo parece o que eu esperaria do use
subcomando.
module use [-a |--append] directory [directory...]
Por padrão, este subcomando precede o diretório à
$MODULEPATH
variável de ambiente. Se o argumento-a
ou--append
for usado, o diretório será anexado a$MODULEPATH
.
Com o subcomando, unuse
ele removerá todos os caminhos que você fornecer.
module unuse directory [directory...]
Remova o diretório da variável de ambiente $MODULEPATH.
Se você quiser substituir completamente uma variável, você sempre pode usar o setenv
comando.
setenv variable value
Defina a variável de ambiente como valor. O
setenv
comando também mudará o ambiente do processo. Uma referência usando o array associativo env do Tcl fará referência às alterações feitas com osetenv
comando. As alterações feitas usando o array associativo env do Tcl NÃO alterarão a variável de ambiente do usuário como o comando setenv. Uma alteração de ambiente feita desta forma afetará apenas o processo de análise do módulo. Osetenv
comando também é útil para alterar o ambiente antes do comandoexec
ousystem
. Quando um modulefile é descarregado,setenv
torna-seunsetenv
. Se a variável de ambiente tiver sido definida, ela será substituída durante o carregamento do modulefile. Um descarregamento subsequente irá desmarcar a variável de ambiente - o valor anterior não pode ser restaurado! (A menos que você lide com isso explicitamente ... veja abaixo.)....