GNU/Linux >> Znalost Linux >  >> Linux

Proč nefunguje ~/.bash_profile?

Používám Linux Mint. Můj přihlašovací shell (cat /etc/passwd | grep myUserName ) je bash.

Poté, co spustím své grafické desktopové prostředí a spustím z něj emulátor terminálu, vidím, že .bash_profile není ze zdroje (proměnné prostředí, které jsou export ed v něm nejsou nastaveny). Ale pokud se přihlásím z textové konzole (ctrl +alt +F1 ) nebo ručně spusťte bash -l z emulátoru terminálu .bash_profile funguje dobře.

Mýlím se, když si myslím, že .bash_profile by měl být zdroj při spuštění X a veškerém export ‘ed vars by měl být k dispozici v terminálu, spuštěný z X?

P.S. Umístění všeho do .bashrc a získáváte jej z .bash_profile není dobrý nápad (https://stackoverflow.com/questions/902946/):materiál prostředí by měl být získáván pouze jednou.

Přijatá odpověď:

Soubor ~/.bash_profile čte bash, když se jedná o přihlašovací shell. To je to, co získáte, když se přihlásíte v textovém režimu.

Když se přihlásíte pod X, spouštěcí skripty se spouštějí pomocí /bin/sh . Na Ubuntu a Mintu /bin/sh je pomlčka, ne bash. Dash a bash mají stejné základní funkce, ale dash se drží těchto základních funkcí, aby byl rychlý a malý, zatímco bash přidává spoustu funkcí za cenu potřeby více zdrojů. Je běžné používat pomlčku pro skripty, které nepotřebují další funkce, a bash pro interaktivní použití (ačkoli zsh má spoustu hezčích funkcí).

Většina kombinací správce zobrazení (program, do kterého zadáváte své uživatelské jméno a heslo) a desktopového prostředí je ~/.profile z přihlašovacích skriptů v /etc/X11/Xsession , /usr/bin/lightdm-session , /etc/gdm/Xsession nebo podle toho, co je použitelné. Vložte tedy definice proměnných prostředí do ~/.profile . Ujistěte se, že používáte pouze syntaxi, kterou pomlčka podporuje.

Co byste tedy měli kam umístit?

  • Dobrý .bash_profile načte .profile a načte .bashrc pokud je shell interaktivní.

    . ~/.profile
    if [[ $- == *i* ]]; then . ~/.bashrc; fi
    
  • V .profile , vložte definice proměnných prostředí a další nastavení relace, jako je ulimit .

  • V .bashrc , vložte interaktivní nastavení bash, jako jsou aliasy, funkce, dokončení, klávesové zkratky (které nejsou v .inputrc ), …
Související:Debian 9:Po upgradu z 8 již MySQL (MariaDB) nefunguje?
Linux
  1. Proč se Tilda (~) nerozšíří uvnitř dvojitých uvozovek?

  2. Proč skript Bash nerozpozná aliasy?

  3. Proč „sudo Su“ ve skriptu Shell nespustí zbytek skriptu jako kořen?

  1. Účel .bashrc a jak to funguje?

  2. The Bash ‘?

  3. Pokud procesy zdědí prostředí rodiče, proč potřebujeme export?

  1. Proč Lsdel v Debugfs nefunguje?

  2. Proč se skript Bash po spuštění neukončí?

  3. Proč „zip“ v A For Loop funguje, když soubor existuje, ale ne, když neexistuje?