То, что вы описываете, это нормальное поведение. Запуск bash с параметром -c
запустит неинтерактивную оболочку , не входящую в систему . Это означает, что bash не будет исходить из своих классических файлов конфигурации, а будет использовать переменную $BASH_ENV
. Как объяснено на странице руководства bash:
неинтерактивная оболочка без входа в систему:
Когда bash запускается неинтерактивно, например, для запуска сценария оболочки он ищет переменную BASH_ENV в среде, расширяет ее значение, если оно там появляется, и использует расширенное значение в качестве имени файла для чтения и выполнения. , Bash ведет себя так, как будто была выполнена следующая команда:
if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi
интерактивная оболочка входа в систему:
Когда bash вызывается как интерактивная оболочка входа в систему или как неинтерактивная оболочка с параметром --login, она сначала читает и выполняет команды из файла /etc/profile, если этот файл существует. После прочтения этого файла он ищет ~/.bash_profile, ~/.bash_login и ~/.profile в указанном порядке, а также читает и выполняет команды из первой, которая существует и доступна для чтения.
интерактивная оболочка без авторизации
Когда запускается интерактивная оболочка, которая не является оболочкой входа в систему, bash читает и выполняет команды из /etc/bash.bashrc и ~/.bashrc, если эти файлы существуют. Это может быть запрещено с помощью параметра --norc. Параметр --rcfile file заставит bash читать и выполнять команды из файла вместо /etc/bash.bashrc и ~/.bashrc.
Итак, если вы хотите, чтобы ваша неинтерактивная оболочка без входа в систему имела исходный код ~/.bahsrc
, вам нужно установить значение BASH_ENV
~/.bashrc
. Добавьте эту строку в ваши файлы ~/.bashrc
или ~/.profile
:
export BASH_ENV=~/.bashrc