Parece que la simple invocación del shell en su sistema no hereda el alias (o la función) con la que se define module
, por lo que el shell no puede encontrarlo (vea a continuación la nota con los extractos). Pruebe type module
desde el indicador para ver cómo module
se define actualmente.
Esencialmente con la fuente es como si escribieras cada línea del guión desde el teclado.
Tenga en cuenta que, por un lado, está heredando todo el historial específico del shell actual, pero, por el otro, el shell actual estará sujeto a todos los efectos secundarios de su script e module
invocación.
Sobre las diferencias entre obtener un script y ejecutarlo, puede leerlo en SuperUser Sep 2009 o Dec 2009 , Ubuntu Feb 2011 , Unix Aug 2011 , Stackoverflow Dec 2012 o en muchos otros lugares.
En este sentido, en la sección Archivos de módulo hay una advertencia :
... Las variables de entorno no se configuran al descargar un archivo de módulo. Por lo tanto, es posible cargar un archivo de módulo y luego descargarlo sin que las variables de entorno vuelvan a su estado anterior.
Por lo tanto, parece más prudente ejecutarlo en un script .
Para lograr esto último puedo pensar:
Para usar un shell interactivo , descuidando el historial específico del presente shell, modificando el shebang de su script con
#!/bin/bash -i
Un shell interactivo lee los comandos de la entrada del usuario en un tty. Entre otras cosas, este shell lee los archivos de inicio en la activación, muestra un mensaje y permite el control del trabajo de forma predeterminada ...
Si, en cambio, prefiere heredar la historia específica del presente shell, puede intentar obtenerlo ... pero en una subshell
( source runit.sh )
Intenta encontrar el alias / función actual de module
with y type module
luego modifica en consecuencia tu script. Tenga en cuenta que no se puede establecer alguna variable de entorno module
.
Si lo desea, puede encontrar los scripts de inicialización en el directorio $MODULESHOME/init/<shell>
.
Comentario
Como se recuerda en las preguntas y respuestas de los módulos
Un proceso secundario (script) no puede cambiar el entorno del proceso primario. La carga de un módulo en un script solo afecta el entorno del script en sí. La única forma en que puede hacer que un script cambie el entorno actual es obtener el script que lo lea en el proceso actual.
Entonces, si desea evitar modificar el entorno actual, creo que es mejor intentar cambiar el shebang (1) o buscar el script en una subshell (2). No estoy completamente seguro de la usabilidad del caso (3).
Nota
Extractos del manual y páginas de descripción de módulos
module
es una interfaz de usuario para el paquete de módulos. El module
alias o función ejecuta el modulecmd
programa y hace que el shell evalúe la salida del comando. El primer argumento para modulecmd
especifica el tipo de shell.
El paquete de módulos y el module
comando se inicializan cuando se genera un script de inicialización específico del shell en el shell . El script crea el comando del módulo, ya sea como un alias o una función de shell, crea variables de entorno de módulos