Pagina 1 di 1

[BASH] pipe senza new subshell

Inviato: ven 25 lug 2014, 17:37
da ZeroUno
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?

Re: [BASH] pipe senza new subshell

Inviato: ven 25 lug 2014, 22:30
da targzeta
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

Re: [BASH] pipe senza new subshell

Inviato: sab 26 lug 2014, 10:48
da ZeroUno
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.