11.04.2013 Views

Guida avanzata di scripting Bash - Portale Posta DMI

Guida avanzata di scripting Bash - Portale Posta DMI

Guida avanzata di scripting Bash - Portale Posta DMI

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Capitolo 20. Subshell<br />

Quando si esegue uno script viene lanciata un’altra istanza del processore dei coman<strong>di</strong>. Proprio come i<br />

coman<strong>di</strong> vengono interpretati al prompt della riga <strong>di</strong> comando, così fa uno script che deve elaborarne una<br />

serie. Ogni script <strong>di</strong> shell in esecuzione è, in realtà, un sottoprocesso della shell genitore, quella che<br />

fornisce il prompt alla console o in una finestra <strong>di</strong> xterm.<br />

Anche uno script <strong>di</strong> shell può mettere in esecuzione dei sottoprocessi. Queste subshell consentono allo<br />

script l’elaborazione in parallelo, vale a <strong>di</strong>re, l’esecuzione simultanea <strong>di</strong> più compiti <strong>di</strong> livello inferiore.<br />

Di solito, un comando esterno presente in uno script genera un sottoprocesso, al contrario <strong>di</strong><br />

un builtin <strong>di</strong> <strong>Bash</strong>. È per questa ragione che i builtin vengono eseguiti più velocemente dei<br />

loro equivalenti coman<strong>di</strong> esterni.<br />

Elenco <strong>di</strong> coman<strong>di</strong> tra parentesi<br />

( comando1; comando2; comando3; ... )<br />

Una lista <strong>di</strong> coman<strong>di</strong> tra parentesi dà luogo ad una subshell.<br />

Nota: Le variabili presenti in una subshell non sono visibili al <strong>di</strong> fuori del suo blocco <strong>di</strong> co<strong>di</strong>ce. Non<br />

sono accessibili al processo genitore, quello che ha lanciato la subshell. Sono, a tutti gli effetti,<br />

variabili locali.<br />

Esempio 20-1. Ambito <strong>di</strong> una variabile in una subshell<br />

#!/bin/bash<br />

# subshell.sh<br />

echo<br />

echo "Livello della subshell all’ESTERNO della subshell = $BASH_SUBSHELL"<br />

# <strong>Bash</strong>, versione 3, adotta la nuova variabile $BASH_SUBSHELL.<br />

echo<br />

variabile_esterna=Esterna<br />

(<br />

echo "Livello della subshell all’INTERNO della subshell = $BASH_SUBSHELL"<br />

variabile_interna=Interna<br />

echo "Nella subshell, \"variabile_interna\" = $variabile_interna"<br />

echo "Nella subshell, \"variabile_esterna\" = $variabile_esterna"<br />

434

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!