Podle odpovědi na Co jsou přihlašovací a nepřihlašovací shelly? na Ask Ubuntu je terminál GNOME typem nepřihlašovacího shellu.
Jak je uvedeno ve vynikající knize Praktický průvodce Fedora a Red Hat Enterprise Linux, 6. vydání :
interaktivní nepřihlašovací shell provádí příkazy v souboru ~/.bashrc. Výchozí soubor ~/.bashrc volá /etc/bashrc.
Výsledkem je /etc/profile
nebudou zpracovány v prostředí bez přihlášení. Zjistil jsem však, že jsem do PATH
připojil domovskou cestu Java
proměnná a když používám terminál GNOME a zadávám příkaz java
, všechno jde dobře. Také hodnota PATH
proměnná je stejná jako hodnota, kterou jsem definoval v /etc/profile
.
Vzhledem k výše uvedeným skutečnostem dochází ke konfliktu. Co je na mém chápání špatného?
Přijatá odpověď:
Když se přihlásíte do relace x prostřednictvím správce zobrazení nebo v tty, /etc/profile
je (obvykle – zjevně ve vašem případě, ačkoli některé grafické shelly jej nečtou) získáván vaším shellovým programem. Poté místní soubor (předpokládám, že zde používáte bash) ~/.bash_profile
, ~/.bash_login
nebo ~/.profile
bude zdrojový a všechny zde definované proměnné prostředí přepíší /etc/profile
pro aktuálního uživatele. Toto prostředí je zděděno jakýmkoliv shellem, který otevřete v rámci relace. To je důvod, proč můžeme v těchto souborech definovat proměnné prostředí, jako je vaše PATH.
Když otevřete gnome-terminal, ve výchozím nastavení ano, spustí se nepřihlašovací prostředí, ale zdědí vaše uživatelské prostředí již načtené z přihlašovacího prostředí nebo grafického prostředí. Od ~/.bashrc
je získáván při spouštění interaktivního shellu (např. otevření gnome-terminálu), lze jej použít k přepsání některých prvky prostředí (jako je PS1).
(samotný terminál gnome je aplikace, nikoli shell)