Es scheint, dass der einfache Aufruf der Shell in Ihrem System nicht den Alias (oder die Funktion) erbt, mit dem bzw. der module
die Shell definiert ist , so dass die Shell ihn nicht finden kann (siehe unten den Hinweis mit den Auszügen). Versuchen Sie type module
an der Eingabeaufforderung zu sehen, wie module
es derzeit definiert ist.
Im Wesentlichen mit Quelle ist wie, wenn Sie jede Zeile des Skripts über die Tastatur schreiben.
Beachten Sie, dass Sie auf der einen Seite den gesamten Verlauf der aktuellen Shell erben, auf der anderen Seite jedoch alle Seiten Ihres Skripts und Ihres Aufrufs auf die aktuelle Shell module
einwirken.
Über die Unterschiede zwischen einem Skript zu beziehen und ihn auszuführen Sie auf Super - User lesen September 2009 oder Dezember 2009 , Ubuntu Februar 2011 , Unix August 2011 , Stackoverflow Dezember 2012 oder in vielen anderen Orten.
In diesem Zusammenhang gibt es im Abschnitt Modulefiles eine Warnung :
... Umgebungsvariablen werden beim Entladen einer Moduldatei nicht gesetzt. Auf diese Weise ist es möglich, ein Moduldatei zu laden und dann zu entladen, ohne dass die Umgebungsvariablen in ihren vorherigen Zustand zurückkehren.
Es erscheint daher sinnvoller, es in einem Skript auszuführen .
Um Letzteres zu erreichen, kann ich denken:
Um eine interaktive Shell zu verwenden , vernachlässigen Sie den spezifischen Verlauf der aktuellen Shell und ändern Sie den Shebang Ihres Skripts mit
#!/bin/bash -i
Eine interaktive Shell liest Befehle von Benutzereingaben auf einem tty. Unter anderem liest eine solche Shell beim Aktivieren Startdateien, zeigt eine Eingabeaufforderung an und aktiviert standardmäßig die Auftragssteuerung ...
Wenn Sie stattdessen lieber die spezifische Geschichte der vorliegenden Shell erben möchten, können Sie versuchen, sie als Quelle zu verwenden ... aber in einer Subshell
( source runit.sh )
Versuchen Sie, den aktuellen Alias / die aktuelle Funktion von module
mit zu finden, type module
und ändern Sie anschließend Ihr Skript. Beachten Sie, dass einige Umgebungsvariablen nicht festgelegt werden können module
.
Wenn Sie möchten, finden Sie die Initialisierungsskripte im Verzeichnis $MODULESHOME/init/<shell>
.
Kommentar
Wie in der Erinnerung Q & A von Modulen
Ein untergeordneter Prozess (Skript) kann die übergeordnete Prozessumgebung nicht ändern. Eine Modulladung in einem Skript wirkt sich nur auf die Umgebung für das Skript selbst aus. Die einzige Möglichkeit, die aktuelle Umgebung durch ein Skript ändern zu lassen, besteht darin, das Skript als Quelle zu verwenden, das es in den aktuellen Prozess einliest.
Wenn Sie also vermeiden möchten, die aktuelle Umgebung zu ändern, ist es meines Erachtens besser, den shebang (1) zu ändern oder das Skript in einer Subshell (2) zu veröffentlichen. Ich bin mir über die Verwendbarkeit des Falls nicht ganz sicher (3).
Hinweis
Auszüge aus Handbuch- und Beschreibungsseiten von Modulen
module
ist eine Benutzeroberfläche für das Modulpaket. Der module
Alias oder die Funktion führt das modulecmd
Programm aus und veranlasst die Shell, die Ausgabe des Befehls auszuwerten. Das erste Argument, modulecmd
das den Typ der Shell angibt.
Das Modulpaket und der module
Befehl werden initialisiert, wenn ein Shell-spezifisches Initialisierungsskript in die Shell aufgenommen wird . Das Skript erstellt den Modulbefehl als Alias- oder Shell-Funktion und erstellt Modulumgebungsvariablen