Come si può usare il Moduli ambientali sistema* in Perl?
In esecuzione
system("load module <module>");
non funziona, presumibilmente perché si biforca in un altro ambiente.
* Da non confondere con i moduli Perl. Secondo il Voce di Wikipedia:
Il sistema Environment Modules è uno strumento che aiuta gli utenti a gestire il proprio ambiente shell Unix o Linux, consentendo di creare o rimuovere dinamicamente gruppi di impostazioni variabili d'ambiente correlate.
risposte:
4 per risposta № 1Sembra il modulo Perl Env::Modulecmd
farà quello che vuoi. Dalla documentazione:
Env::Modulecmd
fornisce un'interfaccia automatizzata amodulecmd
dal Perl. L'uso più semplice diEnv::Modulecmd
serve per caricare e scaricare i moduli in fase di compilazione, sebbene siano previsti molti altri usi.
Esempio di utilizzo:
use Env::Modulecmd { load => "foo/1.0" };
2 per risposta № 2
In alternativa, per farlo meno perl-namespace e più come shell ambiente del modulo ambiente, è possibile generare il codice perl di inizializzazione dei moduli ambiente come le altre shell:
do( "/usr/share/Modules/init/perl");
module("load use.own");
print module("list");
Per un esempio di una riga:
perl -e "do ("/usr/share/Modules/init/perl");print module("list");"
(Questo problema, "modulo ambiente perl sorgente" utilizza parole così generiche, che è quasi non ricercabile.)
0 per risposta № 3
system("load module foo ; foo bar");
o, se non funziona, allora
system("load module foonfoo bar");
Immagino che apporti cambiamenti all'ambientevariabili. Per cambiare le variabili d'ambiente di Perl, dovrebbe essere eseguito all'interno del processo Perl. Questo non funzionerà poiché è stato sicuramente progettato solo per essere integrato nella shell. (Potrebbe non essere troppo difficile portarlo, però.)
Se non riesci a riavviare lo script dopo aver caricato il modulo, puoi utilizzare la seguente soluzione alternativa:
use String::ShellQuote qw( shell_quote );
BEGIN {
if (!@ARGV || $ARGV[0] ne "!!foo_loaded!!") {
my $perl_cmd = shell_quote($^X, "--", $0, "!!foo_loaded!!", @ARGV);
exec("load module foo ; $perl_cmd")
or die $!;
}
shift(@ARGV);
}