Selon la réponse à Que sont les shells de connexion et sans connexion ? sur Ask Ubuntu, GNOME Terminal est un type de shell sans connexion.
Comme le souligne l'excellent livre, A Practical Guide to Fedora and Red Hat Enterprise Linux, 6th Edition :
un shell interactif sans connexion exécute les commandes dans le fichier ~/.bashrc. Le fichier ~/.bashrc par défaut appelle /etc/bashrc.
En conséquence, /etc/profile
ne seront pas traités dans un shell sans connexion. Cependant, j'ai trouvé que j'avais ajouté le chemin d'accès à la maison Java au PATH
variable et, lorsque j'utilise le terminal GNOME et lance la commande java
, tout se passe bien. Aussi, la valeur de PATH
variable est la même que la valeur que j'ai définie dans /etc/profile
.
Au vu des faits mentionnés ci-dessus, il y a un conflit, qu'est-ce qui ne va pas dans ma compréhension ?
Réponse acceptée :
Lorsque vous vous connectez à votre session x via un gestionnaire d'affichage ou dans un tty, /etc/profile
est (généralement - apparemment c'est dans votre cas, bien que certains shells graphiques ne le lisent pas) provenant de votre programme shell. Après cela, un fichier local (je suppose que vous utilisez bash ici) ~/.bash_profile
, ~/.bash_login
ou ~/.profile
sera source, et toutes les variables d'environnement définies ici remplaceront /etc/profile
pour l'utilisateur actuel. Cet environnement est hérité par n'importe quel shell que vous ouvrez dans la session. C'est pourquoi nous pouvons définir des variables d'environnement, telles que votre PATH, dans ces fichiers.
Lorsque vous ouvrez gnome-terminal, oui par défaut, cela démarre un shell sans connexion, mais il hérite de votre environnement utilisateur déjà chargé à partir du shell de connexion ou du shell graphique. Depuis ~/.bashrc
est généré lors du démarrage d'un shell interactif (par exemple, l'ouverture de gnome-terminal), il peut être utilisé pour remplacer certains éléments de l'environnement (tels que PS1).
(gnome-terminal lui-même est une application, pas un shell)