Secondo la risposta a Cosa sono le shell di accesso e non di accesso? su Ask Ubuntu, GNOME Terminal è un tipo di shell senza login.
Come sottolineato nell'ottimo libro, A Practical Guide to Fedora and Red Hat Enterprise Linux, 6th Edition :
una shell interattiva senza login esegue i comandi nel file ~/.bashrc. Il file ~/.bashrc predefinito chiama /etc/bashrc.
Di conseguenza, /etc/profile
non verrà elaborato in una shell non di accesso. Tuttavia, ho scoperto di aver aggiunto il percorso home di java a PATH
e, quando utilizzo il terminale GNOME ed eseguo il comando java
, va tutto bene. Inoltre, il valore del PATH
variabile è lo stesso del valore che ho definito in /etc/profile
.
Alla luce dei fatti sopra menzionati, c'è un conflitto, cosa c'è di sbagliato nella mia comprensione?
Risposta accettata:
Quando accedi alla tua sessione x tramite un display manager o in un tty, /etc/profile
è (di solito – a quanto pare è nel tuo caso, anche se alcune shell grafiche non lo leggono) originato dal tuo programma shell. Dopodiché, un file locale (presumo che tu stia usando bash qui) ~/.bash_profile
, ~/.bash_login
o ~/.profile
verrà originato e qualsiasi variabile di ambiente definita qui sovrascriverà /etc/profile
per l'utente corrente. Questo ambiente è ereditato da qualsiasi shell che apri all'interno della sessione. Questo è il motivo per cui possiamo definire variabili d'ambiente, come il tuo PERCORSO, in questi file.
Quando apri gnome-terminal, sì per impostazione predefinita avvia una shell non di accesso, ma eredita il tuo ambiente utente già caricato dalla shell di accesso o dalla shell grafica. Da ~/.bashrc
è originato all'avvio di una shell interattiva (ad esempio aprendo gnome-terminal), può essere usato per sovrascrivere alcuni elementi dell'ambiente (come PS1).
(gnome-terminal stesso è un'applicazione, non una shell)