
Ich wechsle zwischen Pfaden/Codeprojekten. An jedem Ort habe ich unterschiedliche Module. Um dies zu handhaben, gibt es ein Setup-Skript, das ändert, was verwendet werden soll. Dies wird mit dem Tool „Modul“ gehandhabt.
NOTIZ: modules
ist ein Paket zum Verwalten der Umgebung, das eine Neukonfiguration ermöglicht, sodass verschiedene Anwendungen darauf vorhanden sind $PATH
oder nicht.
Das Problem besteht darin, dass bei jeder Aktualisierung eines Modulpfads ein neuer Eintrag zur Datei hinzugefügt wird~/.modulesbeginenv
#!/user/bin/env tcsh
module unuse $path1
module use $path2
module add project_module
Dieses kurze Beispiel fügt ~/.modulebeginenv
bei jedem Aufruf zwei Zeilen hinzu. Zuerst MODULEPATH='paths'
ohne $path1
und dann MODULEPATH='paths'
mit $path2
.
Es erscheint mir seltsam, dass die Änderung angehängt und nicht aktualisiert wird. Gibt es eine Konfiguration, um dies zu steuern, oder eine andere Möglichkeit, das Problem zu lösen?
Antwort1
use
Wenn ich mir die Verwendung anschaue, klingt das Verhalten, das Sie sehen, nach dem, was ich von dem Unterbefehl erwarten würde .
module use [-a |--append] directory [directory...]
Standardmäßig stellt dieser Unterbefehl das Verzeichnis der
$MODULEPATH
Umgebungsvariable voran. Wenn das Argument-a
oder--append
verwendet wird, wird das Verzeichnis angehängt$MODULEPATH
.
Mit dem Unterbefehl unuse
werden alle von Ihnen angegebenen Pfade entfernt.
module unuse directory [directory...]
Entfernen Sie das Verzeichnis aus der Umgebungsvariable $MODULEPATH.
Wenn Sie eine Variable vollständig überschreiben möchten, können Sie jederzeit den setenv
Befehl verwenden.
setenv variable value
Umgebungsvariable auf Wert setzen. Der
setenv
Befehl ändert auch die Umgebung des Prozesses. Eine Referenz mit Tcls assoziativem env-Array verweist auf Änderungen, die mit demsetenv
Befehl vorgenommen wurden. Änderungen, die mit Tcls assoziativem env-Array vorgenommen werden, ändern NICHT die Umgebungsvariable des Benutzers wie der Befehl setenv. Eine auf diese Weise vorgenommene Umgebungsänderung wirkt sich nur auf den Modulanalyseprozess aus. Dersetenv
Befehl ist auch nützlich, um die Umgebung vor dem Befehlexec
oder zu ändernsystem
. Wenn eine Moduldatei entladen wird,setenv
wirdunsetenv
. Wenn die Umgebungsvariable definiert wurde, wird sie beim Laden der Moduldatei überschrieben. Ein nachfolgendes Entladen setzt die Umgebungsvariable zurück – der vorherige Wert kann nicht wiederhergestellt werden! (Es sei denn, Sie behandeln dies explizit ... siehe unten.)...