Parece que a simples invocação do shell no seu sistema não herda o alias (ou a função) com o qual está definido module
, portanto, o shell não é capaz de encontrá-lo (veja abaixo a nota com os trechos). Tente type module
no prompt para ver como module
ele está definido atualmente.
Essencialmente com fonte é como se você escrevesse cada linha do script a partir do teclado.
Observe que, por um lado, você está herdando todo o histórico específico do shell atual, mas, por outro, o shell atual estará sujeito a todos os efeitos do seu script e module
invocação.
Sobre as diferenças entre a origem e a execução de um script, você pode ler no SuperUser, setembro de 2009 ou dezembro de 2009 , Ubuntu, fevereiro de 2011 , Unix, agosto de 2011 , Stackoverflow, dezembro de 2012 ou em muitos outros lugares.
A esse respeito, na seção Modulefiles , há um aviso :
... As variáveis de ambiente não estão definidas ao descarregar um arquivo de módulo. Assim, é possível carregar um arquivo de módulo e, em seguida, descarregá-lo sem que as variáveis de ambiente retornem ao seu estado anterior.
Portanto, parece mais sábio executá-lo em um script .
Para realizar o último, posso pensar:
Para usar um shell interativo , negligenciando o histórico específico do presente shell, modificando o shebang do seu script com
#!/bin/bash -i
Um shell interativo lê comandos da entrada do usuário em um tty. Entre outras coisas, esse shell lê os arquivos de inicialização na ativação, exibe um prompt e ativa o controle do trabalho por padrão ...
Se, em vez disso, você preferir herdar a história específica do shell atual, tente fornecê-lo ... mas em um subshell
( source runit.sh )
Tente encontrar o alias / função atual de module
com type module
e modifique em conseqüência o seu script. Observe que algumas variáveis de ambiente não podem ser definidas para module
.
Se você quiser, pode encontrar a inicialização scripts no diretório $MODULESHOME/init/<shell>
.
Comentário
Como lembrado nas perguntas e respostas dos módulos
Um processo filho (script) não pode alterar o ambiente do processo pai. Um carregamento de módulo em um script afeta apenas o ambiente para o próprio script. A única maneira de alterar um script no ambiente atual é originar o script que o lê no processo atual.
Portanto, se você quiser evitar modificar o ambiente atual, acho melhor tentar alterar o shebang (1) ou criar o script em um subshell (2). Não tenho muita certeza da usabilidade do caso (3).
Nota
Trechos das páginas de manual e descrição dos módulos
module
é uma interface de usuário para o pacote de módulos. O module
alias ou função executa o modulecmd
programa e faz com que o shell avalie a saída do comando. O primeiro argumento para modulecmd
especificar o tipo de shell.
O pacote Modules e o module
comando são inicializados quando um script de inicialização específico do shell é originado no shell . O script cria o comando module, como uma função de alias ou shell, cria variáveis de ambiente de Módulos