Comment affecter la sortie d'un programme à une variable dans un script com DCL sur VMS?
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
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.