| environ(7) | Miscellaneous Information Manual | environ(7) |
environ - ambiente dell'utente
extern char **environ;
La variabile environ si riferisce a un array di puntatori a stringhe chiamato l'«ambiente». L'ultimo puntatore di questo array ha valore NULL. Questo array di stringhe è reso disponibile al processo dalla chiamata di sistema execve(2) quando viene eseguito un nuovo programmaQuando viene creato un processo figlio tramite fork(2), esso eredita una copia dell'ambiente del suo genitore.
Per convenzione le stringhe in environ hanno il formato "nome=valore". Il nome distingue maiuscole da minuscole e non può contenere il carattere "=". Il valore può essere qualsiasi cosa rappresentabile come stringa. Il nome e il valore non possono contenere il byte nullo ('\[rs]0') perché si assume che sia il terminatore della stringa.
Le variabili d'ambiente possono essere messe nell'ambiente di shell dal comando export e da `"nome=valore" in sh(1), o dal comando setenv se si usa csh(1).
L'ambiente iniziale della shell è riempito in diversi modi, tra i quali le definizioni contenute in /etc/environment che sono elaborate da pam_env(8) per tutti gi utenti al momento del login (su sistemi che impiegano pam(8)). In aggiunta, vari script di inizializzazione della shell, come lo script a livello globale /etc/profile e lo script delle inizializzazioni per utente possono includere comandi che aggiungolo variabili all'ambiente della shell; per i dettagli vedere la pagina di manuale della shell preferita.
Le shell in stile Bourne riconoscono la sintassi
NOME=valore comando
per creare una definizione di variabile d'ambiente solo nell'ambito del processo che esegue comando. Più definizioni di variabile, separate da spazi bianchi, possono precedere comando.
Argomenti posso essere messi nell'ambiente come parametro di un exec(3). Un programma in C può modificare il suo ambiente usando le funzioni getenv(3), putenv(3), setenv(3) e unsetenv(3).
Segue un elenco di variabili d'ambiente che si vedono normalmente sul sistemi. Questo elenco è incompleto e include solo variabili comuni viste dall'utente medio durante il suo accesso di routine. Variabili d'ambiente specifiche per programmi o funzioni di libreria sono documentate nella sezione AMBIENTE delle varie pagine di manuale.
Si noti che il comportamento di molti programmi e routine delle librerie è influenzato dalla presenza o dal valore di alcune variabili d'ambiente. Gli esempi comprendono:
Storicamente e secondo lo standard, environ deve essere dichiarato nei programmi utente. In ogni caso, come aiuto (non standard) al programmatore, environ è dichiarato nel file header <unistd.h> se la macro di test _GNU_SOURCE è definita (vedere feature_test_macros(7)).
Le operazioni PR_SET_MM_ENV_START e PR_SET_MM_ENV_END di prctl(2) possono essere usate per controllare la posizione dell'ambiente dei processi.
Le variabili HOME, LOGNAME, SHELL e USER sono impostate quando l'utente è cambiato da una interfaccia di gestione della sessione, tipicamente da un programma quale login(1) a partire da un database utenti (come passwd(5)). (Passando all'utente root usando su(1) si può avere un ambiente misto nel quale LOGNAME e USER sono mantenuti dal vecchio utente; vedere la pagina di manuale su(1).)
Qui c'è chiaramente un rischio di sicurezza. Molti comandi di sistema sono stati indotti a fare danni da un utente che specificava valori insoliti per IFS o LD_LIBRARY_PATH.
C'è anche il rischio di un inquinamento dello spazio nome. Programmi come make e autoconf permettono la sovrascrittura dei nomi delle utility di default dall'ambiente con variabili dal nome simile cambiato in maiuscole/minuscole. In questo modo esse usano CC per selezionare il compilatore C desiderato (e similarmente MAKE, AR, AS, FC, LD, LEX, RM, YACC, etc.). Tuttavia in alcuni usi tradizionali tale variabile d'ambiente dà opzioni al programma invece di un nome di percorso. In questo modo uno ha MORE e LESS. Tale uso è considerato scorretto, e deve essere evitato nei nuovi programmi.
bash(1), csh(1), env(1), login(1), printenv(1), sh(1), su(1), tcsh(1), execve(2), clearenv(3), exec(3), getenv(3), putenv(3), setenv(3), unsetenv(3), locale(7), ld.so(8), pam_env(8)
La traduzione italiana di questa pagina di manuale è stata creata da Giovanni Bortolozzo <borto@dei.unipd.it>, Alessandro Rubini <rubini@linux.it>, Ottavio G. Rizzo <rizzo@pluto.linux.it>, Giulio Daprelà <giulio@pluto.it>, Elisabetta Galli <lab@kkk.it>, Marco Curreli <marcocurreli@tiscali.it> e Giuseppe Sacco <eppesuig@debian.org>
Questa traduzione è documentazione libera; leggere la GNU General Public License Versione 3 o successiva per le condizioni di copyright. Non ci assumiamo alcuna responsabilità.
Per segnalare errori nella traduzione di questa pagina di manuale inviare un messaggio a pluto-ildp@lists.pluto.it.
| 15 giugno 2024 | Linux man-pages 6.9.1 |