Bash liest .bashrc nicht, es sei denn, es wird manuell gestartet

Bash liest .bashrc nicht, es sei denn, es wird manuell gestartet

bashwird nicht .bashrcvon einem interaktiven Terminal bezogen, es sei denn, ich führe es manuell bashvon einem Terminal aus:

$ bash

oder geben Sie die Quelle manuell ein:

$ source ./.bashrc

oder ausgeführt:

$ st -e bash

Hier sind einige hoffentlich nützliche Ergebnisse:

$ echo $TERM
st-256color

$ echo $SHELL
/bin/sh

$ readlink /bin/sh
bash

$ shopt login_shell
login_shell     off

Ich verwende CRUX Linux 3.0 und dwm. stIch habe versucht, .bash_profileund zu verwenden, jedoch .profileohne Erfolg.

Irgendwelche Ideen?

Antwort1

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

Antwort2

Warum sollte es als Quelle verwendet werden? Ihre Standard-Shell ist nicht Bash, sondern sh:

$ echo $SHELL
/bin/sh

In den meisten modernen Systemen shhandelt es sich um einen symbolischen Link zu einer Basis-Shell. Auf meinem Debian zum Beispiel:

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

In Ihrem Fall shhandelt es sich jedoch um einen Link zu bash, wie in erläutert man bash:

Wenn bash mit dem Namen sh aufgerufen wird, versucht es, das Startverhalten früherer Versionen von sh so genau wie möglich nachzuahmen und gleichzeitig den POSIX-Standard einzuhalten. [...] Wenn bash als interaktive Shell mit dem Namen sh aufgerufen wird, sucht es nach der Variable ENV, erweitert ihren Wert, falls er definiert ist, und verwendet den erweiterten Wert als Namen einer zu lesenden und auszuführenden Datei. DaEine als sh aufgerufene Shell versucht nicht, Befehle aus anderen Startdateien zu lesen und auszuführen., die Option --rcfile hat keine Wirkung.

Und

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

Da Ihre Standard-Shell ist sh, .bashrcwird nicht gelesen. Stellen Sie Ihre Standard-Shell einfach mit auf Bash ein chsh -s /bin/bash.

verwandte Informationen