Wie die Ausgabe eines Programms zu einer Variablen in einem DCL com Skript auf VMS zuweisen?
Frage
Zum Beispiel habe ich einen Perl-Skript p.pl, die „5“ nach stdout schreibt. Ich möchte, dass die Ausgabe in einer Variablen zugewiesen werden wie folgt:
$ x = perl p.pl ! not working code
$ ! now x would be 5
Lösung
Der PIPE-Befehl können Sie Unix-ish Pipelining tun, aber DCL ist nicht bash. die Ausgabe zu einem Symbol zugewiesen zu bekommen ist schwierig. Jedes Rohrsegment läuft in einem separaten Teilprozess (wie Unix), und es gibt keine Möglichkeit, ein Symbol aus einer Teilprozess zurückzukehren. AFAIK gibt es keine bash Äquivalent stdout zu einer Variablen zugewiesen wird.
Der typische Ansatz ist zu schreiben (Umleitung) die Ausgabe in eine Datei und dann wieder lesen:
$ PIPE perl p.pl > temp.txt
$ open t temp.txt
$ read t x
$ close t
Ein weiterer Ansatz ist der Rückgabewert als JOB logisch zuzuordnen, die von allen Teilprozessen gemeinsam genutzt wird. Dies kann als ein Einzeiler mit PIPE getan werden:
$ PIPE perl p.pl | DEFINE/JOB RET_VALUE @SYS$PIPE
$ x = f$logical("RET_VALUE")
Da die „RET_VALUE“ von allen Prozessen im Job geteilt wird, müssen Sie von Nebenwirkungen vorsichtig sein.
Andere Tipps
Geben Sie den PIPE-Befehl auf. Es lässt Sie tun Unix wie Dinge.