1

У меня есть следующее на моем .vimrc

set shell=C:/cygwin/bin/bash
set shellcmdflag=-c
set shellxquote=\"

Таким образом, оболочка, которую я использую, неинтерактивна и не требует входа в систему. Я думал, что не входящий в систему оболочек источник .bashrc, но это, похоже, не так. Я не хочу делать свою оболочку interactive или login . Есть ли способ для меня источник .bashrc по-другому? Мой .bash_profile уже исходники .bashrc

1 ответ1

4

То, что вы описываете, это нормальное поведение. Запуск 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .