Come assegnare l'output di un programma per una variabile in uno script com DCL su VMS?

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

  •  09-10-2019
  •  | 
  •  

Domanda

Per esempio, ho un p.pl script perl che scrive "5" per stdout. Mi piacerebbe assegnare tale uscita ad una variabile in questo modo:

$ x = perl p.pl ! not working code
$ ! now x would be 5
È stato utile?

Soluzione

Il comando PIPE permette di fare pipelining Unix-ish, ma DCL non è bash. Ottenere l'uscita assegnata ad un simbolo è difficile. Ogni segmento di tubo viene eseguito in un sottoprocesso separato (come Unix) e non c'è modo per restituire un simbolo da un sottoprocesso. AFAIK, non c'è bash equivalente di assegnare stdout a una variabile.

L'approccio tipico è quello di scrivere (redirect) l'output in un file e poi leggerlo di nuovo:

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

Un altro approccio è quello di assegnare il valore restituito come un lavoro logico che è condiviso da tutti i sottoprocessi. Questo può essere fatto come un one-liner con PIPE:

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

Dato che il "RET_VALUE" è condivisa da tutti i processi del lavoro, bisogna stare attenti a effetti collaterali.

Altri suggerimenti

cercare il comando PIPE. Ti permette di fare unix piacciono le cose.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top