
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
.