GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Warum funktioniert das ~/.bash_profile nicht?

Ich verwende Linux Mint. Meine Login-Shell (cat /etc/passwd | grep myUserName ) ist bash.

Nachdem ich meine grafische Desktop-Umgebung gestartet und einen Terminal-Emulator ausgeführt habe, kann ich dieses .bash_profile sehen wird nicht bezogen (Umgebungsvariablen, die export sind ed darin sind nicht gesetzt). Aber wenn ich mich von einer Textkonsole aus anmelde (ctrl +alt +F1 ) oder manuell bash -l ausführen vom Terminalemulator, .bash_profile funktioniert gut.

Liege ich falsch, wenn ich denke, dass .bash_profile sollten bezogen werden, wenn X startet und alle export ‘ed vars sollten im Terminal verfügbar sein und von X ausgeführt werden?

P.S. Platzieren Sie alles in .bashrc und es aus .bash_profile beziehen ist keine gute Idee (https://stackoverflow.com/questions/902946/):Umgebungsmaterial sollte nur einmal bezogen werden.

Akzeptierte Antwort:

Die Datei ~/.bash_profile wird von bash gelesen, wenn es sich um eine Login-Shell handelt. Das erhalten Sie, wenn Sie sich im Textmodus anmelden.

Wenn Sie sich unter X anmelden, werden die Startskripte von /bin/sh ausgeführt . Unter Ubuntu und Mint /bin/sh ist dash, nicht bash. Dash und Bash haben beide die gleichen Kernfunktionen, aber Dash hält sich an diese Kernfunktionen, um schnell und klein zu sein, während Bash viele Funktionen hinzufügt, auf Kosten von mehr Ressourcen. Es ist üblich, dash für Skripte zu verwenden, die die zusätzlichen Funktionen nicht benötigen, und bash für die interaktive Verwendung (obwohl zsh viele nettere Funktionen hat).

Die meisten Kombinationen aus Display Manager (das Programm, in das Sie Ihren Benutzernamen und Ihr Passwort eingeben) und Desktop-Umgebung lauten ~/.profile aus den Anmeldeskripten in /etc/X11/Xsession , /usr/bin/lightdm-session , /etc/gdm/Xsession oder was auch immer anwendbar ist. Legen Sie also Ihre Umgebungsvariablendefinitionen in ~/.profile ab . Stellen Sie sicher, dass Sie nur Syntax verwenden, die dash unterstützt.

Also, was sollten Sie wo hinstellen?

  • Ein gutes .bash_profile lädt .profile , und lädt .bashrc wenn die Shell interaktiv ist.

    . ~/.profile
    if [[ $- == *i* ]]; then . ~/.bashrc; fi
    
  • In .profile , Definitionen von Umgebungsvariablen und andere Sitzungseinstellungen wie ulimit .

  • In .bashrc , setzen Sie interaktive Bash-Einstellungen wie Aliase, Funktionen, Vervollständigung, Tastenbelegungen (die nicht in .inputrc ), …
Siehe auch:Debian 9:Nach Upgrade von 8 funktioniert MySQL (MariaDB) nicht mehr?
Linux
  1. Warum wird die Tilde (~) nicht innerhalb doppelter Anführungszeichen erweitert?

  2. Warum erkennt das Bash-Skript keine Aliase?

  3. Warum führt „sudo Su“ in einem Shell-Skript den Rest des Skripts nicht als Root aus?

  4. Die Bash‘?

  5. Wenn Prozesse die Umgebung des übergeordneten Elements erben, warum brauchen wir dann den Export?

.bashrc vs. .bash_profile

Der Zweck von .bashrc und wie funktioniert es?

Warum funktioniert das Parent Shell Here-Dokument nicht für Unterbefehle in Dash, aber Bash funktioniert?

Warum funktioniert Cryptkeeper nicht in 12.04?

Warum spielt der PC keine DVDs ab??

Warum funktioniert Bash `(())` nicht innerhalb von `[[]]`?