Newsgroup: it.comp.os.linux.sys
Titolo: Scope variabili in bash

Ho un codice di questo tipo:
---------------------------------
echo "PID $$"
miafunzionebash | while read line do;
   echo "PID $$"
   tante cose
   pippo="pluto"
   exit 3
done
 
echo "PID $$"
echo ${pippo}
echo "RET $?"
---------------------------------
 
 
${pippo}, fuori dal while/do non è popolata (e visto che il codice arriva fin li, anche l'exit non viene calcolato), eppure da quel che ho letto, lo scope è lo stesso, non trattandosi di una subshell. 
Forse è la pipe che mi trae in inganno. Una pipe siffatta modifica lo scope e/o genera una subshell con il contenuto del while ?
 
A parte ciò, quello che in realtà vorrei fare è far uscire l'intero script da dentro il while, con un bel "exit 3" eppure non esce.
Non da errori, semplicemente RET è 0 invece di 3
 
Come caspita faccio a far uscire lo script brutalmente da dentro quel while ?
 
Il pid, stampato tre volte, è sempre lo stesso.

 Forse è la pipe che mi trae in inganno. Una pipe siffatta modifica lo scope e/o genera una subshell con il contenuto del while ?
 
Il problema è la pipe. Ho risolto:
http://stackoverflow.com/questions/124167/bash-variable-scope
 
 
 while read line do ... done < <(miafunzionebash)

 while ?
 
Mi viene in mente solo il metodo banale di controllare lo stato di uscita 
del while ma credo esista un metodo più elegante che mi sfugge.
 
 
 
 
--- news://
freenews.netfront.net/
 - complaints: 
ne...@netfront.net
 ---

  while read line do ... done < <(miafunzionebash)
 
Mi congratulo. Questo dimostra che si fa prima da soli che chiedendo 
aiuto agli altri, spesso in maniera arrogante (ma non è questo il caso).
Il problema è che quando si devono fare quattro cose contemporaneamente
rispondere ai post su USENET ha la priorità minore.
 
Ad maiora


 Proprio così.
 
Per meglio dire la pipe genera una subshell dove viene eseguito il
while. Meglio precisare.


 rispondere ai post su USENET ha la priorità minore.
 
Non ho capito, cosa avrei fatto di male?
Solitamente quando posto su usenet non significa: risolvete voi il problema, io me ne sbatto.
Ma più semplicemente: "intanto posto, così guadagno tempo, nel frattempo continuo a cercare. Vediamo chi fa prima, se io a cercare o qualcuno a rispondere che magari ha già affrontato il problema in passato"
 
In questo caso ho trovato soluzione dopo pochi minuti dal post (ma è da ieri che smadonno)
 
P.S: il "while read line; do" funziona, lo uso ovunque, popola $line con ciascuna riga che gli arriva in ingresso:
 
$ echo -e "ciao\nmondo" | while read line; do echo "LINEA $line"; done
LINEA ciao
LINEA mondo
 
 
Di sbagliato, nel copia-incolla, c'è la posizione delle virgola, non il readline (oppure anche a te ha funzionato male il copia-incolla ed hai attaccato due pezzi!?)

 attaccato due pezzi!?)
 
 
Di sbagliato sta che nell'OP il punto e virgola (e non la virgola) sta 
dopo il ``do'' mentre va  tra il ``read line'' ed il ``do''.
 
Ma sono bazzecole, il vero errore era l'altro.


 dopo il ``do'' mentre va  tra il ``read line'' ed il ``do''.
 
Si, intendevo il punto e virgola.
Sono un po rincoglionito ultimamente.