On Wed, 21 Jul 2010 09:38:35 +0200 Michele Bert <micbert75@xxxxxxxxx> wrote: > Ho spulciato un po' il web alla ricerca di approfondimenti a proposito > delle variabili d'ambiente del web, ma sembra che tutte le trattazioni > partano da presupposti un po' limitativi. "Variabili d'ambiente del web"? Cosa intendi? > Per entrare nello specifico del mio problema (i miei dubbi e curiosità > spazierebbero ben di più), ogni volta che si parla di variabili > d'ambiente lo si fa con riferimento ad una shell. Mentre io ho bisogno > che alla partenza del sistema, in ambiente grafico, siano predefinite > determinate variabili d'ambiente. > Ma è proprio vero che il contesto sia esclusivamente quello? Non > potrebbe un processo qualsiasi andare a leggere il valore di una > variabile d'ambiente? E in questa situazione, per ogni processo esiste > usa shell da cui esso discende? L'"ambiente" è una caratteristica dei processi Unix (ma possibilmente presente anche in sistemi figli di un dio minore...), di tutti i processi, indipendentemente che siano lanciati "da una shell" o meno. Ci sono delle "funzioni primitive", come la "getenv()" e la "putenv()" che consentono di consultare oppure di alterare l'environment: ogni processo conserva un proprio ambiente, indipendente e intangibile dagli altri processi. Alla creazione del processo, la "exec()" prepara una copia del proprio ambiente e lo aggancia al nuovo processo. Il fatto che solitamente ci si riferisca alla shell è solo una questione di praticità e consuetudine: nella stragrande maggioranza dei casi l'ambiente viene manipolato, a livello utente, dalla shell, dove viene esposto con le cosiddette "variabili d'ambiente", generalmente con la sintassi "$nomevariabile". A sua volta la shell ha un meccanismo con cui può controllare *quali* di queste variabili siano da considerare "globali" oppure "private": quando la shell crea un nuovo processo (ad esempio, perché l'utente ha scritto "emacs" sulla riga di comando e dato l'invio) "passa" al nuovo processo tutte le variabili marcate "global", e non quelle "local". Dalla riga di comando di una bash, con "set" ottieni un dump di tutte le variabili definite nell'ambiente (cioè, sia quelle globali che quello locali), mentre con "env" (o "printenv") ottieni tutte e sole quelle globali (cioè quelle che, eseguendo un sottoprocesso, verranno ereditate). Le varie shell hanno sintassi differenti per gestire le variabili. Ad esempio la bash: $ a=1 $ echo $a 1 qui sopra ho definito una nuova variabile "a", con valore "1". Di default la variabile viene considerata "locale": $ set | egrep '^a=' a=1 $ env | egrep '^a=' $ $ python Python 2.6.5 (r265:79063, Apr 16 2010, 13:57:41) [GCC 4.4.3] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import os >>> os.getenv('a') >>> Un sottoprocesso qualsiasi (in questo caso l'interprete Python) non la vede. Se però torno nella bash, e dichiaro quella variabile "globale": $ export a $ set | egrep '^a=' a=1 $ env | egrep '^a=' a=1 allora la variabile viene inserita nell'environ di qualsiasi sottoprocesso: $ python Python 2.6.5 (r265:79063, Apr 16 2010, 13:57:41) [GCC 4.4.3] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import os >>> os.getenv('a') '1' > A quest'ultima domanda posso già ripondere di no, dal momento che il > capostipite dell'albero dei processi è "init", il quale lancia diversi > altri processi che quindi non appartengono ad alcuna shell. Ma cosa mi > sapete dire dei processi lanciati, ad esempio, dal desktop grafico? L'origine del processo (cioè, *chi* lo ha lanciato, se una shell interattiva, o una applicazione grafica) non ha alcun impatto sull'ambiente. > qualsiasi indicazione su letture approfondite sull'argomento è bene > accetta. Vedi il manuale di environ(7), che a sua volta fa riferimento alle funzioni primitive clearenv(3), exec(3), getenv(3), putenv(3), setenv(3), unsetenv(3) che lo controllano. Alla bisogna, consulta anche la sezione dedicata alle variabili d'ambiente della tua shell preferita. ciao, lele. -- nickname: Lele Gaifax | Quando vivrò di quello che ho pensato ieri real: Emanuele Gaifas | comincerò ad aver paura di chi mi copia. lele@xxxxxxxxxxxxxxxxxxx | -- Fortunato Depero, 1929. -- nickname: Lele Gaifax | Se non si ha voglia di far conoscere a real: Emanuele Gaifas | qualcuno quello che si è fatto, forse lelegaifax at gmail.com | non si doveva farlo affatto. -- Google's CEO -- Per iscriversi (o disiscriversi), basta spedire un messaggio con OGGETTO "subscribe" (o "unsubscribe") a mailto:linuxtrent-request@xxxxxxxxxxxxx