Bash не читает .bashrc, если не запущен вручную

Bash не читает .bashrc, если не запущен вручную

bashне будет работать .bashrcс интерактивным терминалом, пока я вручную не запущу bashиз терминала:

$ bash

или вручную найти его:

$ source ./.bashrc

или работает:

$ st -e bash

Вот некоторые полезные выводы, которые я надеюсь:

$ echo $TERM
st-256color

$ echo $SHELL
/bin/sh

$ readlink /bin/sh
bash

$ shopt login_shell
login_shell     off

Я использую CRUX Linux 3.0 и dwm. stЯ пробовал использовать .bash_profileи , .profileно безуспешно.

Есть идеи?

решение1

В .bash_profile убедитесь, что у вас есть следующее:

# .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

решение2

Зачем он это делает? Ваша оболочка по умолчанию не bash, но sh:

$ echo $SHELL
/bin/sh

В большинстве современных систем shэто символическая ссылка на базовую оболочку. Например, на моем Debian:

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

В вашем случае shэто ссылка на , bashно, как объяснено в man bash:

Если bash вызывается с именем sh, он пытается максимально точно имитировать поведение запуска исторических версий sh, при этом также соблюдая стандарт POSIX. [...] При вызове в качестве интерактивной оболочки с именем sh bash ищет переменную ENV, расширяет ее значение, если оно определено, и использует расширенное значение в качестве имени файла для чтения и выполнения. Посколькуоболочка, вызванная как sh, не пытается читать и выполнять команды из других файлов запуска, опция --rcfile не имеет никакого эффекта.

и

--norc
Не читать и не выполнять общесистемный файл инициализации /etc/bash.bashrc и персональный файл инициализации ~/.bashrc, если оболочка интерактивна. Эта опция включена по умолчанию, если оболочка вызывается как sh.

Итак, поскольку ваша оболочка по умолчанию — sh, .bashrcне читается. Просто установите оболочку по умолчанию на bash с помощью chsh -s /bin/bash.

Связанный контент