PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : variabelen scriptübergreifend ???



Chakotay
14-11-2006, 17:56
hab im chatprogramm ein script aktiv das auf eingaben reagiert und dabei durch die eingabe 3 verschiedene variabelen definiert
nun soll von dem script ein anderes script gestartet werden
und eben diese 3 variabelen im neuen script zur verfügung stehen

weiss einer wie ich sowas machen kann ???

Molaf
14-11-2006, 22:00
Einfach die Variablen abspeichern, und das andere Programm liest die dann zum Startzeitpunkt (oder regelnmässig) ein.

Erst wenn das zweite Programm die Variablen auch verarbeitet zurückgeben will, wird es kompliziert.

zst
15-11-2006, 02:56
Hallo Chakotay,

im BASH-Script würde ich die 3 Variablen einfach exportieren, dann stehen sie im zweiten Script auch zur Verfügung.
export VAR1 VAR2 VAR3
Genau wie Molaf schreibt, ist die verarbeitete Rückgabe an Script 1 jedoch nicht so einfach möglich.

ODER besser: Das zweite Script mit vorangestelltem "Punkt Blank" aus dem ersten Script starten, dann geht´s auch ohne export. Dann ist auch das Verändern der Variablen im Script 2 kein Problem, da sie nach Ende von Script 2 dem Script 1 mit neuem Inhalt zur Verfügung stehen.

... alles bezogen auf BASH ... aber was da geht, geht sicher ähnlich auch woanders ...

Gruss zst

Chakotay
15-11-2006, 14:41
ne also das erste script definiert die variabelen

das zweite verwendet diese dann nur ändert sie aber nicht

das mit dem export klappt irgendwie noch nicht (haste viell ne seite mit nem beispiel?)

hab sonst auch mit nem kleinen selbstgemachten modul rumexperimentiert

da fehlt mir nur die möglichkeit ne variabele temp vom hauptscript aus reinzuladen und nach gebrauch wieder zu entfernen :-)

zst
15-11-2006, 21:25
Hallo Chakotay,

ich kann es fast nicht glauben, dass es bei Dir nicht funktioniert ...
In Script 1:

export VAR="HALLO"
In Script 2, welches aus Script 1 heraus gestartet wird, ist VAR dann verfügbar.
Wie mehrfach von mir erwähnt: BASH
Die meisten Deiner Beiträge nennen PERL ...

Gruss zst

sticky bit
16-11-2006, 00:11
Sollte es um PERL gehen, schau dir fork() an, das macht nen neuen Prozess, der eine exakte Kopie des Prozesses in dem es aufgerufen wurde darstellt, also inkl. der Variablen. Mittels Pipes (pipe()) kannst du hier sogar Daten von den beiden Prozessen hin und herstreamen. Eine Pipe für unidirktionalen Datanstrom, zwei für bidirektionalen (also zwei mal unidirektional bloss halt einmal vice versa). Alternativ geht das unidirektional auch mit open() (mit "-|" bzw. "|-" als Datei in den Argumenten) bi- oder gar "tridirektional" mit [i]open2() oder open3(), welche aus den Modulen IPC::Open2 respektive IPC::Open3 exportiert werden...
Achja, SystemV-IPC mit Shared-Memory, etc. wäre auch noch denkbar oder Threads, welche aber AFAIK immer noch experimentell sind...

Mit open() eine Pipe zu öffnen ginge auch in ein fremdes Programm, statt dem - muss dann der Pfad zur ausführbaren Datei angegeben werden, das wird dann in eine Subshell verfrachten und je nach dem ob der '|' vor oder hinter dem Pfad steht STDIN des Programm mit dem STDOUT deines Skriptes oder STDIN deines Sktiptes mit STDOUT des Programms verknüpft. Mit open2() und open3() lässt sich halt beides auf einmal machen, bzw. auch noch der STDERR des Programms abgreifen...

Wenns nicht um PERL geht, vergiss es, obwohl man Pipes auch in der BaSh und anderen Shells verwenden kann. Mittels temporärer Dateien liess sich eine Art "Shared-Memory" auf ziehen...
Aber vielleicht ist das alles auch schonüber dimensioniert für dein Vorhaben, dass weiss ich jetzt natürlich nicht, dann nutz das mit dem export wie bereits erwähnt...

Chakotay
16-11-2006, 04:39
:o sry hatte vergessen es beizuschreiben :o

natührlich rede ich von perl^^
das muss ich mir nachher wenn ich vonner arbeit komm nochmal genauer anschauen :)

Chakotay
17-11-2006, 16:22
ok
nach längerem grübeln über http://de.selfhtml.org wegen des fork()... bin ich nu total iritiert

also ich hab ein aktives perlscript :-)
darin ist in einer sub die nur auf nen bestimmten input reagiert zB


sub auto_test
{
my $INPUT = join ( " ", @_);
my $me = ( IRC::get_info(1) );

if($INPUT =~ m/:(.*)\!(.*) PRIVMSG $me :(.*)/)
{
$NICK = $1;
$ADRESS = $2;
$MESS = $3;

Xchat::command("load /test/pfad/zum/script.pl");
return 1;
} else { return 0; }
return 1;
}


nu soll das script welches da aufgerufen wurde den inhalt von $NICK $ADRESS und $MESS als label in einer gtk2 gui anzeigen
dazu muss ich die variabelen aber erst mal ins 2. script kriegen

sticky bit
18-11-2006, 10:11
Es bleibt natürlich auch noch die Möglichkeit Daten als Argumente im Aufruf zu übergeben. Findeste im aufgerufenen Skript dann in @ARGV...

Chakotay
18-11-2006, 12:46
gibt es noch ne möglichkeit ?

in einem xchat load kann ich so nix hinterschreiben

sticky bit
18-11-2006, 14:47
Naja, fällt mir eigentlich nur noch der nicht so schöne Umweg über temporäre Dateien ein... Oder Umgebungsvariablen schreiben, aber das ist noch unschöner...
Aber ich kenn diese Module nicht die du da benutzt und was du nun genau machen möchtest hab ich auch noch ned so 100% verstanden. Evtl. muss man das einfach nur anders strukturieren um dann mit den gegebenen Methoden ans Ziel zu kommen...

Chakotay
18-11-2006, 16:07
hmm

naja bis mir ne schönere lösung einfällt mach ich es erstmal mit der tempdatei :-)
das funktioniert und ist recht einfach zu schreiben^^ (da schon fertig ^^)

trotzdem hier danke für alle hilfestellungen :-)

kaas
17-03-2007, 14:09
Auch auf die Gefahr hin, mich mittels meines unqualifizierten Senfes unbeliebt zu machen, ich habe keine Ahnung von Perl. Aber lassen sich die Variablen nicht als Kommandozeilenargumente übergeben?

reneeb
18-03-2007, 11:15
Das geht prinzipiell schon, aber wie in jeder anderen Sprache auch, nur dann wenn das andere Programm gestartet wird. Wenn Variablen zwischen zwei laufenden Programmen geteilt werden sollen, ist es nicht mehr ganz so einfach...