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_profilenačte.profilea načte.bashrc, pokud je shell interaktivní.. ~/.profile if [[ $- == *i* ]]; then . ~/.bashrc; fi -
Do
.profilevložte definice proměnných prostředí a další nastavení relace, napříkladulimit. - V
.bashrcvlož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.bashrcz 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/profilese 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
~/.profilepro grafické přihlášení a~/.xsessionrcby 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í.