Comment affecter la sortie d'un programme à une variable dans un script com DCL sur VMS?

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

  •  09-10-2019
  •  | 
  •  

Question

Par exemple, j'ai un p.pl script perl qui écrit "5" à stdout. Je voudrais attribuer cette sortie à une variable comme ceci:

$ x = perl p.pl ! not working code
$ ! now x would be 5
Était-ce utile?

La solution

La commande PIPE vous permet de faire pipelining Unix-ish, mais DCL n'est pas bash. Obtenir la sortie affectée à un symbole est délicat. Chaque segment de tuyau fonctionne dans un sous-processus séparés (comme Unix) et il n'y a aucun moyen de retourner un symbole d'un sous-processus. Autant que je sache, il n'y a pas bash équivalent d'attribuer stdout à une variable.

L'approche classique consiste à écrire (redirect) la sortie vers un fichier, puis le relire:

 $ PIPE perl p.pl > temp.txt 
 $ open t temp.txt
 $ read t x
 $ close t

Une autre approche consiste à attribuer la valeur de retour comme un travail logique qui est partagée par tous les sous-processus. Cela peut se faire en utilisant un Fourreau:

 $ PIPE perl p.pl | DEFINE/JOB RET_VALUE @SYS$PIPE
 $ x = f$logical("RET_VALUE")

Depuis la « RET_VALUE » est partagée par tous les processus du travail, vous devez être prudent d'effets secondaires.

Autres conseils

Recherchez la commande PIPE. Il vous permet de faire des choses comme unix.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top