Bash nie czyta .bashrc, chyba że zostanie ręcznie uruchomiony

22

bashnie będzie źródła .bashrcz terminala interaktywnego, chyba że ręcznie uruchomię bashz terminala:

$ bash

lub ręcznie to:

$ source ./.bashrc

lub bieganie:

$ st -e bash

Oto kilka przydatnych wyników Mam nadzieję:

$ echo $TERM
st-256color

$ echo $SHELL
/bin/sh

$ readlink /bin/sh
bash

$ shopt login_shell
login_shell     off

Korzystam z CRUX Linux 3.0 i używam dwmi st. Próbowałem używać .bash_profilei .profilebez powodzenia.

Jakieś pomysły?

pośpiech
źródło

Odpowiedzi:

19

Dlaczego miałby to pozyskiwać? Nie działa prawda bash:

$ echo $SHELL
/bin/sh

W większości współczesnych systemów shjest dowiązaniem symbolicznym do podstawowej powłoki. Na przykład w moim Debianie:

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

W twoim przypadku shjest link do, bashale, jak wyjaśniono w man bash:

Jeśli bash jest wywoływany z nazwą sh, próbuje naśladować zachowanie startowe historycznych wersji sh tak dokładnie, jak to możliwe, przy jednoczesnym zachowaniu zgodności ze standardem POSIX. [...] Przywoływany jako interaktywna powłoka o nazwie sh, bash szuka zmiennej ENV, rozszerza jej wartość, jeśli jest zdefiniowana, i używa rozszerzonej wartości jako nazwy pliku do odczytu i wykonania. Ponieważ powłoka wywoływana jako sh nie próbuje czytać i wykonywać poleceń z innych plików startowych , opcja --rcfile nie ma wpływu.

i

--norc
Nie czytaj i nie uruchamiaj ogólnosystemowego pliku inicjującego /etc/bash.bashrc i osobistego pliku inicjującego ~ / .bashrc, jeśli powłoka jest interaktywna. Ta opcja jest domyślnie włączona, jeśli powłoka jest wywoływana jako sh.

Ponieważ domyślną powłoką jest sh, .bashrcnie jest czytana. Po prostu ustaw domyślną powłokę na bash chsh -s /bin/bash.

terdon
źródło
Dziękuję Ci. Uznałem, że to nie ma znaczenia, ponieważ /bin/shwskazałem /bin/bash. Podejrzewam, że ten problem wynikał z nieprzypisania powłoki jawnie /bin/bashpodczas tworzenia konta użytkownika.
pośpiesz
Również Debian / Ubuntu przełączył się dashna /bin/shw ramach wysiłków zmierzających do skrócenia czasu uruchamiania. Było to zabawne, gdy moi użytkownicy zaczęli pytać, dlaczego ich powłoka działa inaczej.
kurtm 10.10.2013
18

W .bash_profile upewnij się, że masz:

# .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
źródło
1
@terdon Twoja odpowiedź jest poprawna. Moja odpowiedź byłaby ważna tylko, gdyby biegł bash. Niezły chwyt, przegapiłem to.
Jeight,
Może ci to przysporzyć kłopotów, jeśli biegniesz bashobok innej powłoki, takiej jak ta, ksh93która .profiledomyślnie używa .
Kusalananda
Jeśli ~ / .bash_profile nie istnieje, możesz go utworzyć.
Pratik Singhal,
.bashrc w systemie operacyjnym Debain, .bash_profile w CentOS / Fedora / Mac OS
Mitoxys