Repository 32bit  Forum
Repository 64bit  Wiki

[BASH] pipe senza new subshell

Forum dedicato alla programmazione.

Moderatore: Staff

Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.

[BASH] pipe senza new subshell

Messaggioda ZeroUno » ven lug 25, 2014 16:37

ho uno script che esegue un comando in pipe; questo comando deve anche assegnare una variabile. Il problema è che il comando dopo pipe viene eseguito in una nuova subshell, il che significa che se lì assegno una variabile non me la ritrovo alla fine della esecuzione.
per esempio
Codice: Seleziona tutto
# x=1
# echo | x=2
# echo $x
1


C'è qualche soluzione?
Packages finder: slakfinder.org | Slackpkg+, per aggiungere repository a slackpkg
Codice: Seleziona tutto
1011010 1100101 1110010 1101111 - 0100000 - 1010101 1101110 1101111
Avatar utente
ZeroUno
Staff
Staff
 
Messaggi: 4413
Iscritto il: ven giu 02, 2006 13:52
Località: Roma / Castelli
Nome Cognome: Matteo Rossini
Slackware: current
Kernel: slack-current
Desktop: ktown-latest
Distribuzione: 01000000-current

Re: [BASH] pipe senza new subshell

Messaggioda targzeta » ven lug 25, 2014 21:30

Secondo il man della bash:
Codice: Seleziona tutto
Each command in a pipeline is executed as a separate process (i.e., in a subshell).
e, secondo questa guida
Codice: Seleziona tutto
Variables in a subshell are not visible outside the block of code in the subshell. They are not accessible to the parent process, to the shell that launched the subshell. These are, in effect, local variables.
sembra proprio che la tua domanda non abbia una risposta positiva :).

Dipende da quello che fai nella pipeline, però, potresti farti tornare il nuovo valore da assegnare alla variabile, aggiornandola:
Codice: Seleziona tutto
# x=1
# x=$(echo | echo 2)
# echo $x
2

Emanuele
Linux Registered User #454438
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
20/04/2013 - Io volevo Rodotà
Avatar utente
targzeta
Iper Master
Iper Master
 
Messaggi: 6189
Iscritto il: gio nov 03, 2005 14:05
Località: Carpignano Sal. (LE) <-> Pisa
Nome Cognome: Emanuele Tomasi
Slackware: current
Kernel: latest stable
Desktop: IceWM

Re: [BASH] pipe senza new subshell

Messaggioda ZeroUno » sab lug 26, 2014 9:48

Quello che devo fare è ovviamente più complicato di un echo e in parte ci sono riuscito. Se infatti invece di pipe uso <<< il comando che prende l'output non viene eseguito in subshell.
Non ho un pc davanti ma qualcosa come

x=2 <<< $(echo)

dovrebbe funzionare.
Packages finder: slakfinder.org | Slackpkg+, per aggiungere repository a slackpkg
Codice: Seleziona tutto
1011010 1100101 1110010 1101111 - 0100000 - 1010101 1101110 1101111
Avatar utente
ZeroUno
Staff
Staff
 
Messaggi: 4413
Iscritto il: ven giu 02, 2006 13:52
Località: Roma / Castelli
Nome Cognome: Matteo Rossini
Slackware: current
Kernel: slack-current
Desktop: ktown-latest
Distribuzione: 01000000-current


Torna a Programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite