Wie die Ausgabe eines Programms zu einer Variablen in einem DCL com Skript auf VMS zuweisen?

StackOverflow https://stackoverflow.com/questions/4431757

  •  09-10-2019
  •  | 
  •  

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
War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top