Come assegnare l'output di un programma per una variabile in uno script com DCL su VMS?
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
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.