Почему мой файл ~ / .bash_profile не работает?

Я использую Linux Mint. Моя оболочка для входа ( cat /etc/passwd | grep myUserName ) – bash.

После того, как я запустил графическую среду рабочего стола и запускал эмулятор терминала из нее, я мог видеть, что .bash_profile не является источником (среды, которые export в нем, не установлены). Но если я вхожу из текстовой консоли ( ctrl + alt + F1 ) или вручную запускаю bash -l из эмулятора терминала, .bash_profile работает нормально.

Я ошибаюсь, когда думаю, что .bash_profile должен быть источником при запуске X, и все export vars должны быть доступны в терминале, запущенном с X?

PS Размещение всего в .bashrc и поиск его из .bash_profile – не очень хорошая идея ( https://stackoverflow.com/questions/902946/ ): материал среды должен быть получен только один раз.

4 Solutions collect form web for “Почему мой файл ~ / .bash_profile не работает?”

Файл ~/.bash_profile считывается bash, когда он является оболочкой входа. Это то, что вы получаете, когда вы входите в текстовый режим.

Когда вы входите в систему под X, сценарии запуска выполняются с помощью /bin/sh . На Ubuntu и Mint /bin/sh – тире , а не bash. У Dash и bash есть те же основные функции, но штрих к этим основным функциям, чтобы быть быстрыми и маленькими, в то время как bash добавляет множество функций за счет потребности в большем количестве ресурсов. Обычно используется тире для скриптов, которым не нужны дополнительные функции и bash для интерактивного использования (хотя zsh имеет много приятных функций ).

Большинство комбинаций диспетчера дисплеев (программа, в которой вы вводите имя пользователя и пароль) и среда рабочего стола читаете ~/.profile из сценариев входа в /etc/X11/Xsession , /usr/bin/lightdm-session , /etc/gdm/Xsession или в зависимости от того, что применимо. Поэтому поставьте определения переменных среды в ~/.profile . Обязательно используйте только синтаксис, поддерживающий тире.

Так что вы должны положить где?

  • Хороший .bash_profile загружает .profile и загружает .bashrc если оболочка является интерактивной.

     . ~/.profile if [[ $- == *i* ]]; then . ~/.bashrc; fi 
  • В .profile определения переменных среды и другие параметры сеанса, такие как ulimit .

  • В .bashrc поместите интерактивные настройки bash, такие как псевдонимы, функции, завершение, привязки клавиш (которые не находятся в .inputrc ), …

См. Также Разница между оболочкой входа и оболочкой без входа в систему? и Альтернатива .bashrc .

Вы в основном ошибаетесь, думая, что .bash_profile должен быть получен при запуске X. .bash_profile – это сценарий конфигурации запуска bash. Нет стандартного мандата X для источника .bash_profile .

То, о чем вы думаете, скорее .profile . Первоначально это был файл конфигурации запуска sh. Сегодня во многих дистрибутивах есть среда рабочего стола, настроенная на исходный .profile . Обратите внимание, что это также не стандарт, но, похоже, это соглашение.

Источники Debian .profile при графическом входе в систему ( ссылка ). .xprofile источники .xprofile при графическом входе в систему ( ссылка ). Ubuntu использовал, чтобы препятствовать использованию .profile ( ссылка на старую версию в wiki)

Что касается вашего другого вопроса: Почему мой ~ / .bash_profile не работает? Это ожидаемое поведение.

Поведение, короче говоря, выглядит следующим образом:

  • bash запускается как интерактивная оболочка входа: reads ~/.profile
  • bash запущен как интерактивная оболочка без входа: reads ~/.bashrc

Более подробно см. Мой ответ на аналогичный вопрос в askubuntu: https://askubuntu.com/questions/132276/configure-gnome-terminal-to-start-bash-as-a-login-shell-doesnt-read-bashrc / 132319 # 132319

В вашем вопросе вы ссылаетесь на https://stackoverflow.com/questions/902946/, рекомендуя не использовать источник, когда принятый ответ предписывает

  • Поместите мою установку PATH в файл .profile (потому что я иногда использую другие оболочки)
  • Поместите мои псевдонимы и функции Bash в файл .bashrc
  • Затем используйте это [EDITED: snip code-comments]:

    .bash_profile :

     #!/bin/bash # echo "Loading ${HOME}/.bash_profile" source ~/.profile # Get the paths source ~/.bashrc # get aliases 

Внесение всего этого в .profile не работало для меня в Linux Mint. Использование .bashrc отлично работало.

Простое решение – сделать терминал терминалом входа. Для терминала Gnome в разделе «Плитка и команда» профиля по умолчанию вы можете установить флажок «Запустить команду в качестве оболочки входа». В этой статье объясняется разница между оболочкой входа и отсутствием.

  • Замените расширение динамического файла фиксированным расширением файла
  • Выполнить скрипт автоматически через pbrun?
  • cat> / path / to / file << EOF отбрасывает содержимое пасты, а также патч << EOF. Зачем?
  • Храните переменную \ in read для отображения пространства
  • Команда Spawn не найдена
  • Какова цель команды bash `suspend` builtin?
  • Сценарий Bash не читает ввод
  • переместить среднюю часть имени файла в начало
  • Имеет ли оболочка один и тот же стандартный вход, стандартный вывод, стандартная ошибка, как каждая команда?
  • не удалось войти через tty {1-6} в качестве обычного пользователя
  • Вырезать поле в строке с bash
  • Linux и Unix - лучшая ОС в мире.