Bash liest .bashrc nur, wenn es manuell gestartet wird

22

bashKeine Quelle .bashrcvon einem interaktiven Terminal, es sei denn, ich starte manuell bashvon einem Terminal aus:

$ bash

oder manuell beziehen:

$ source ./.bashrc

oder Laufen:

$ st -e bash

Hier sind einige nützliche Ergebnisse, die ich hoffe:

$ echo $TERM
st-256color

$ echo $SHELL
/bin/sh

$ readlink /bin/sh
bash

$ shopt login_shell
login_shell     off

Ich bin auf CRUX Linux 3.0 und ich benutze dwmund st. Ich habe versucht mit .bash_profileund .profileohne Erfolg.

Irgendwelche Ideen?

Eile
quelle

Antworten:

19

Warum sollte es es beschaffen? Sie laufen nicht wahr bash:

$ echo $SHELL
/bin/sh

In den meisten modernen Systemen shist eine Verknüpfung zu einer grundlegenden Shell. Auf meinem Debian zum Beispiel:

$ ls -l /bin/sh 
lrwxrwxrwx 1 root root 4 Aug  1  2012 /bin/sh -> dash

In deinem Fall shist ein Link zu bashaber, wie in erklärt man bash:

Wenn bash mit dem Namen sh aufgerufen wird, wird versucht, das Startverhalten historischer Versionen von sh so genau wie möglich nachzuahmen, wobei auch der POSIX-Standard eingehalten wird. [...] Beim Aufruf als interaktive Shell mit dem Namen sh sucht bash nach der Variablen ENV, erweitert ihren Wert, wenn sie definiert ist, und verwendet den erweiterten Wert als Namen einer Datei, die gelesen und ausgeführt werden soll. Da eine als sh aufgerufene Shell nicht versucht, Befehle aus anderen Startdateien zu lesen und auszuführen , hat die Option --rcfile keine Auswirkung.

und

--norc
Lesen Sie die systemweite Initialisierungsdatei /etc/bash.bashrc und die persönliche Initialisierungsdatei ~ / .bashrc nicht und führen Sie sie nicht aus, wenn die Shell interaktiv ist. Diese Option ist standardmäßig aktiviert, wenn die Shell als sh aufgerufen wird.

Also, da Ihre Standard-Shell ist sh, .bashrcwird nicht gelesen. Setzen Sie einfach Ihre Standard-Shell auf bash using chsh -s /bin/bash.

terdon
quelle
Vielen Dank. Ich nahm an, dass es keine Rolle spielte, /bin/shauf was er zeigte /bin/bash. Ich nehme an, dass dieses Problem darauf zurückzuführen ist, /bin/bashdass ich die Shell bei der ursprünglichen Erstellung des Benutzerkontos nicht explizit zugewiesen habe .
Eile
Auch Debian / Ubuntu geschaltet dashfür /bin/shals Teil der Bemühungen , die Startzeit zu reduzieren. Das war lustig, als meine Benutzer fragten, warum ihre Shell anders gehandelt hat.
Kurtm
18

Stellen Sie in .bash_profile sicher, dass Sie Folgendes haben:

# .bash_profile

# If .bash_profile exists, bash doesn't read .profile
if [[ -f ~/.profile ]]; then
  . ~/.profile
fi

# If the shell is interactive and .bashrc exists, get the aliases and functions
if [[ $- == *i* && -f ~/.bashrc ]]; then
    . ~/.bashrc
fi
Jeight
quelle
1
@terdon Deine Antwort ist die richtige. Meine Antwort wäre nur gültig, wenn er rennt bash. Schöner Fang, das habe ich verpasst.
Jeight
Dies kann zu Kopfschmerzen führen, wenn Sie bashneben einer anderen Shell ausgeführt werden, wie sie standardmäßig ksh93verwendet .profilewird.
Kusalananda
Wenn ~ / .bash_profile nicht existiert, können Sie es erstellen.
Pratik Singhal
.bashrc unter Debain-basierten Betriebssystemen, .bash_profile unter CentOS / Fedora / Mac OS
Mitoxys