Это исходное решение от Debian. Обоснование этого объясняется в этом очень хорошем вики-посте , выдержка которого приведена ниже. Резюме сводится к тому, чтобы «гарантировать, что логины GUI и не GUI работают одинаково»:
Давайте возьмем xdm в качестве примера. Однажды Пьер возвращается из отпуска и обнаруживает, что его системный администратор установил xdm в систему Debian. Он просто входит в систему, и xdm читает его файл .xsession и запускает fluxbox. Кажется, все в порядке, пока он не получит сообщение об ошибке в неправильной локали! Поскольку он переопределяет переменную LANG в своем .bash_profile, а xdm никогда не читает .bash_profile, его переменная LANG теперь установлена в en_US вместо fr_CA.
Теперь наивное решение этой проблемы состоит в том, что вместо запуска «xterm» он может настроить свой оконный менеджер на запуск «xterm -ls». Этот флаг сообщает xterm, что вместо запуска обычной оболочки следует запустить оболочку входа в систему. При такой настройке xterm порождает / bin / bash, но в вектор аргумента помещает «- / bin / bash» (или, может быть, «-bash»), поэтому bash действует как оболочка входа в систему. Это означает, что каждый раз, когда он открывает новый xterm, он будет читать / etc / profile и .bash_profile (встроенное поведение bash), а затем .bashrc (потому что .bash_profile говорит об этом). На первый взгляд может показаться, что это работает нормально - его точечные файлы не тяжелые, поэтому он даже не замечает задержки - но есть более тонкая проблема. Он также запускает веб-браузер прямо из меню Fluxbox, и веб-браузер наследует переменную LANG от fluxbox, который теперь настроен на неправильную локаль. Таким образом, хотя его xterms могут быть в порядке, и все, что запускается из его xterms, может быть в порядке, его веб-браузер по-прежнему предоставляет ему страницы в неправильной локали.
Итак, что является лучшим решением этой проблемы? Там действительно нет универсального. Лучше всего изменить файл .xsession так, чтобы он выглядел примерно так:
[ -r /etc/profile ] && source /etc/profile
[ -r ~/.bash_profile ] && source ~/.bash_profile
xmodmap -e 'keysym Super_R = Multi_key'
xterm &
exec fluxbox
Это заставляет оболочку, которая интерпретирует скрипт .xsession, читать в / etc / profile и .bash_profile, если они существуют и доступны для чтения, перед запуском xmodmap или xterm или «выходом» из оконного менеджера. Однако у этого подхода есть один потенциальный недостаток: в xdm оболочка, которая читает .xsession, работает без управляющего терминала. Если в / etc / profile или .bash_profile используются какие-либо команды, предполагающие наличие терминала (например, «fortune» или «stty»), эти команды могут завершиться с ошибкой. Это основная причина, почему xdm не читает эти файлы по умолчанию. Если вы собираетесь использовать этот подход, вы должны убедиться, что все команды в ваших «точечных файлах» безопасны для выполнения, когда нет терминала.
-n "$BASH_VERSION"
быть правдой за пределами Баш?