Il semble que la simple invocation du shell dans votre système n'hérite pas de l'alias (ou de la fonction) avec lequel est défini module
, donc le shell n'est pas en mesure de le trouver (voir ci-dessous la note avec les extraits). Essayez à type module
partir de l'invite pour voir comment module
il est actuellement défini.
Essentiellement avec la source, c'est comme si vous écriviez chaque ligne du script à partir du clavier.
Notez que d'un côté vous héritez de tout l'historique spécifique du shell actuel mais, de l'autre, le shell actuel sera soumis à tous les effets de votre script et de votre module
invocation.
À propos des différences entre la source d'un script et son exécution, vous pouvez lire sur SuperUser Sep 2009 ou Dec 2009 , Ubuntu Feb 2011 , Unix Aug 2011 , Stackoverflow Dec 2012 ou dans de nombreux autres endroits.
À cet égard, dans la section Modulefiles , il y a un avertissement :
... Les variables d'environnement ne sont pas définies lors du déchargement d'un fichier de modules. Ainsi, il est possible de charger un modulefile puis de le décharger sans que les variables d'environnement reviennent à leur état antérieur.
Il semble donc plus judicieux de l'exécuter dans un script .
Pour accomplir ce dernier je pense:
Pour utiliser un shell interactif , en négligeant l'historique spécifique du shell actuel, en modifiant le shebang de votre script avec
#!/bin/bash -i
Un shell interactif lit les commandes de l'entrée utilisateur sur un tty. Entre autres choses, un tel shell lit les fichiers de démarrage lors de l'activation, affiche une invite et active le contrôle des travaux par défaut ...
Si à la place vous préférez hériter de l'histoire spécifique du shell actuel, vous pouvez essayer de la source ... mais dans un sous - shell
( source runit.sh )
Essayez de trouver l'alias / la fonction actuelle de module
avec type module
puis modifiez en conséquence votre script. Notez que certaines variables d'environnement ne peuvent pas être définies pour module
.
Si vous le souhaitez, vous pouvez trouver les scripts d'initialisation dans le répertoire $MODULESHOME/init/<shell>
.
Commentaire
Comme rappelé dans les Q&R des modules
Un processus enfant (script) ne peut pas modifier l'environnement de processus parent. Une charge de module dans un script affecte uniquement l'environnement du script lui-même. La seule façon dont un script peut changer l'environnement actuel est de trouver le script qui le lit dans le processus en cours.
Donc, si vous voulez éviter de modifier l'environnement actuel, je pense qu'il vaut mieux essayer de changer le shebang (1) ou source le script dans un sous-shell (2). Je ne suis pas complètement sûr de l'utilisabilité du boîtier (3).
Remarque
Extraits des pages de manuel et de description des modules
module
est une interface utilisateur pour le module Modules. L' module
alias ou la fonction exécute le modulecmd
programme et demande au shell d'évaluer la sortie de la commande. Le premier argument pour modulecmd
spécifier le type de shell.
Le package Modules et la module
commande sont initialisés lorsqu'un script d'initialisation spécifique au shell est fourni dans le shell . Le script crée la commande module, sous forme d'alias ou de fonction shell, crée des variables d'environnement Modules