Sembra che la semplice invocazione della shell nel tuo sistema non erediti l'alias (o la funzione) con cui è definita module
, quindi la shell non è in grado di trovarla (vedi sotto la nota con gli estratti). Prova type module
dal prompt per vedere come module
è attualmente definito.
Essenzialmente con source è come se scrivessi ogni riga dello script dalla tastiera.
Nota che da un lato stai ereditando tutta la cronologia specifica della shell corrente ma, dall'altro, la shell corrente sarà soggetta all'effetto di tutti i lati del tuo script e della tua module
chiamata.
Sulle differenze tra l'origine di uno script e l'esecuzione è possibile leggere su SuperUser settembre 2009 o dicembre 2009 , Ubuntu febbraio 2011 , Unix agosto 2011 , Stackoverflow dicembre 2012 o in molti altri luoghi.
A questo proposito nella sezione Modulefiles c'è un avvertimento :
... Le variabili di ambiente non sono impostate quando si scarica un file di modulo. Pertanto, è possibile caricare un file di modulo e quindi scaricarlo senza che le variabili di ambiente tornino al loro stato precedente.
Quindi sembra più saggio eseguirlo in uno script .
Per realizzare quest'ultimo, posso pensare:
Per usare una shell interattiva , trascurando la cronologia specifica della shell attuale, modificando il shebang del tuo script con
#!/bin/bash -i
Una shell interattiva legge i comandi dall'input dell'utente su un tty. Tra l'altro, una tale shell legge i file di avvio all'attivazione, visualizza un prompt e abilita il controllo dei processi per impostazione predefinita ...
Se invece preferisci ereditare la storia specifica della presente shell, puoi provare a procurarla ... ma in una subshell
( source runit.sh )
Prova a trovare l'attuale alias / funzione di module
con type module
quindi modifica di conseguenza il tuo script. Nota: alcune variabili d'ambiente non possono essere impostate per module
.
Se lo desideri, puoi trovare gli script di inizializzazione nella directory $MODULESHOME/init/<shell>
.
Commento
Come ricordato nelle domande e risposte dei moduli
Un processo figlio (script) non può modificare l'ambiente del processo padre. Un caricamento del modulo in uno script influisce solo sull'ambiente per lo script stesso. L'unico modo in cui è possibile fare in modo che uno script cambi l'ambiente corrente è di procurarsi lo script che lo legge nel processo corrente.
Quindi, se vuoi evitare di modificare l'ambiente attuale, penso che sia meglio provare a cambiare lo shebang (1) o creare lo script in una subshell (2). Non sono completamente sicuro dell'usabilità del caso (3).
Nota
Estratti dalle pagine di manuali e descrizioni dei moduli
module
è un'interfaccia utente per il pacchetto Moduli. L' module
alias o la funzione esegue il modulecmd
programma e fa in modo che la shell valuti l'output del comando. Il primo argomento per modulecmd
specificare il tipo di shell.
Il pacchetto Modules e il module
comando vengono inizializzati quando uno script di inizializzazione specifico della shell viene fornito nella shell . Lo script crea il comando module, come alias o funzione shell, crea variabili d'ambiente Modules