Tradizionalmente, il posto per definire le variabili di ambiente per utente sui sistemi unix è ~/.profile
. Questo file viene letto dalla shell di accesso (ovvero dal programma che viene avviato quando si accede e in cui è possibile digitare i comandi), a condizione che la shell di accesso sia una shell compatibile con Bourne.
Bash è una shell compatibile con Bourne. Quando viene invocato come shell di login, legge ~/.bash_profile
se questo file esiste e ~/.profile
se ~/.bash_profile
non esiste.
Come regola generale, se si digita la password in modalità testo (ad esempio, su una console di testo o in remoto con ssh), la shell che si ottiene è una shell di accesso.
Tuttavia, se si digita la password in un programma grafico e si accede a un ambiente grafico, questo ignora la normale shell di accesso. La .profile
lettura in questo caso dipende dalla configurazione della sessione grafica; ad esempio, varia tra le distribuzioni Linux, tra i display manager e tra gli ambienti desktop. A volte uno dei programmi della catena invoca esplicitamente una shell di login; a volte uno dei programmi legge esplicitamente ~/.profile
; e a volte nulla di tutto ciò accade e ~/.profile
non viene letto.
Per dare un esempio della variabilità, per quanto posso dire da una rapida occhiata agli script in questione, su Ubuntu 10.04: se accedi con kdm o lxdm, ~/.bash_profile
viene letto se esiste, e ~/.profile
altrimenti; se accedi con gdm, ~/.profile
viene letto solo ; se accedi con xdm, ~/.profile
non viene letto.
Tutti i sistemi che conosco forniscono un modo per impostare le variabili di ambiente per utente. Purtroppo non esiste una risposta generale.
Si noti che a volte vengono visualizzati consigli per impostare le variabili di ambiente ~/.bashrc
o avviare una shell di accesso in ciascun terminale in un ambiente GUI. Entrambe sono cattive idee; uno dei motivi è il problema riscontrato, ovvero che le variabili di ambiente erano disponibili solo nei programmi avviati tramite un terminale e non nei programmi avviati direttamente con un'icona o un menu o una scorciatoia da tastiera.