Používám Linux Mint. Moje přihlašovací prostředí (cat /etc/passwd | grep myUserName
) je bash.
Poté, co spustím grafické grafické prostředí a spustím z něj emulátor terminálu, vidím, že .bash_profile
není získáván (prostředí vars, které jsou export
ed in it are unset). But if I log in from a text console ( ctrl + alt + F1 ) or manually run 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 získán při spuštění X a všechny export
„ed vars by měly být k dispozici v terminálu, běžící z X?
PS Umístit vše do .bashrc
a získat to z .bash_profile
není dobrý nápad ( https://stackoverflow.com/questions/902946/ ): obsah prostředí by měl být získán pouze jednou.
Odpovědět
Soubor ~/.bash_profile
čte bash, pokud se jedná o přihlašovací shell. Toho 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 provede /bin/sh
. V systémech Ubuntu a Mincovna, /bin/sh
je dash , ne bash. Dash i bash mají stejné základní funkce, ale dash se drží tyto základní funkce, aby byly rychlé a malé, zatímco bash přidává mnoho funkcí za cenu vyžadování více zdrojů. Běžně se používá dash pro skripty, které nepotřebují další funkce a bash pro interaktivní použití (i když zsh má mnohem hezčí funkce ).
Většina kombinací zobrazení správce (program, do kterého zadáte své uživatelské jméno a heslo) a desktopové prostředí čte ~/.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é. Definice proměnných prostředí tedy vložte do ~/.profile
. Ujistěte se, že používáte pouze syntaxi, kterou podporuje pomlčka.
Takže co byste měli dát kam?
-
Dobrý
.bash_profile
načte.profile
a načte.bashrc
, pokud je shell interaktivní.. ~/.profile if [[ $- == *i* ]]; then . ~/.bashrc; fi
-
Do
.profile
vložte definice proměnných prostředí a další nastavení relace, napříkladulimit
. - V
.bashrc
vložte bash interaktivní nastavení, jako jsou aliasy, funkce, dokončení, vazby kláves (které nejsou.inputrc
),…
Viz také Rozdíl mezi přihlašovacím a nepřihlašovacím prostředím? a Alternativa k .bashrc .
Komentáře
- mnoho věcí naučených jedinou odpovědí: )
- Ani .profile nefunguje ' v Debianu 10 " Buster ", pouze .bashrc wor ks
Odpověď
.bash_profile
je spouštěcí konfigurační skript bash. Neexistuje žádný standardní příkaz X ke zdroji .bash_profile
.
Na co myslíte, je spíše .profile
. Původně to byl spouštěcí konfigurační soubor bourne shell (sh). Dnes má mnoho distribucí své desktopové prostředí nastaveno na source .profile
. Všimněte si, že to také není standard, ale zdá se, že jde o konvenci.
Debian používal ke zdroji .profile
při grafickém přihlášení ( wiki stránka od roku 2013 ) nyní nefunguje ( wiki stránka od roku 2016 ).
Archivní zdroje .xprofile
při grafickém přihlášení ( wiki stránka od roku 2013 ).
Ubuntu odradil od používání .profile
( wiki stránky od roku 2013 ), už to neodradí ( wiki stránka od roku 2016 ).
Pokud jde o vaši další otázku: Proč můj ~ / .bash_profile nefunguje? To je očekávané chování.
Chování je ve zkratce následující:
- bash začal jako interaktivní přihlašovací shell: čte
~/.profile
- bash začal jako interaktivní bez přihlašovací prostředí: čte
~/.bashrc
Další podrobnosti naleznete v mé odpovědi na podobné ar otázka v askubuntu: https://askubuntu.com/questions/132276/configure-gnome-terminal-to-start-bash-as-a-login-shell-doesnt-read-bashrc/132319#132319
Komentáře
- Některé z nich jsou správné, ale„ vždy číst
~/.bashrc
„je špatná rada: byste měli číst pouze.bashrc
z interaktivního prostředí .Zde vám ' chyběl hlavní problém, který spočívá v tom, že při přihlašování pod X neexistuje žádná přihlašovací instance bash (ve většině kombinací prostředí správce displeje a plochy, včetně evidentně AntonioK ' s). - Děkujeme za zpětnou vazbu. Doufám, že jsem svou odpověď aktualizoval dostatečně dobře, abych vyřešil vaše stížnosti. Pokud jde o moji radu " vždy číst
.bashrc
", myslel jsem vždy na interaktivní shell . Tuto část jsem objasnil. Doufám, že to již nebude zavádějící. - " Ubuntu konkrétně odrazuje od používání
.profile
( odkaz ) " Wiki to jednou (absurdně) odradilo; že ' s byly opraveny. (Poznámka/etc/profile
se nedoporučuje pro celosystémová přiřazení, raději přidávání skriptů k/etc/profile.d
.) jsou nyní prezentovány jako jeden z doporučených způsobů nastavení proměnných prostředí pro uživatele: " Vhodné soubory pro nastavení proměnných prostředí, které by měly ovlivnit pouze konkrétního uživatele ( spíše než systém jako celek) jsou ~ / .pam_environment a ~ / .profile . " - Odkazovaná stránka o Debianu určuje, že Debian ne nečte
~/.profile
pro grafické přihlášení a~/.xsessionrc
by měl být místo toho použito. - děkuji za pozornost. wiki stránka byla aktualizována. Připojil jsem se k verzím, jaké byly v době odpovědi.
Odpovědět
Nastane několik problémů, když pokouší se znovu načíst / source ~ / .profile soubor. [Týká se to Ubuntu linuxu – v některých případech se podrobnosti příkazů budou lišit]
- Spouštíte to přímo v terminálu nebo ve skriptu?
- Jak spustíte to ve skriptu?
Ad. 1)
Spuštění přímo v terminálu znamená, že nebude vytvořen žádný subshell. Můžete tedy použít buď dva příkazy:
source ~/.bash_profile
nebo
. ~/.bash_profile
V obou případech tím se prostředí aktualizuje o obsah souboru .profile.
Reklama 2) Jakýkoli bash skript můžete spustit voláním
sh myscript.sh
nebo
. myscript.sh
V prvním případě se vytvoří subshell, který nebude mít vliv na proměnné prostředí váš systém a budou viditelné pouze pro proces subshell. Po dokončení příkazu subshell nebude použit žádný z exportů atd. TOTO JE SPOLEČNÁ CHYBA A ZPŮSOBÍ SPOUSTU VÝVOJCŮ ZTRÁTU SPOUSTU ČASU.
Aby změny provedené ve vašem skriptu mohly mít účinek na v globálním prostředí musí být skript spuštěn pomocí příkazu
.myscript.sh
.
Abyste se ujistili, že skript není spuštěn v subshel můžete použít tuto funkci. (Příklad je opět pro prostředí Ubuntu)
#/bin/bash preventSubshell(){ if [[ $_ != $0 ]] then echo "Script is being sourced" else echo "Script is a subshell - please run the script by invoking . script.sh command"; exit 1; fi }
Doufám, že to odstraní některá běžná nedorozumění! : D Hodně štěstí!
Odpověď
Ve své otázce odkazujete na https://stackoverflow.com/questions/902946/ doporučující nepřijímat, když přijatá odpověď předepíše
- Vložit mé nastavení PATH do souboru .profile (protože někdy používám jiné skořápky)
- Vložit mé Bash aliasy a funkce do mého. soubor bashrc
Pak použijte tento [EDITOVÁNO: snip code-comments]:
.bash_profile
:#!/bin/bash # echo "Loading ${HOME}/.bash_profile" source ~/.profile # Get the paths source ~/.bashrc # get aliases
Uvedení všeho do .profile
nefunguje pro mě na Linux Mint. Použití .bashrc
fungovalo dobře.
Odpověď
Jednoduchým řešením je vytvořit terminál přihlašovací terminál. U terminálu Gnome pod položkou „Dlaždice a příkazy“ výchozího profilu můžete zaškrtnout políčko „Spustit příkaz jako přihlašovací shell“. Tento článek vysvětluje rozdíl mezi přihlašovacím shellem a jiným, který ním není.