Какие установочные файлы следует использовать для настройки переменных среды с помощью bash?

9

Как я просил и получил ответы здесь и здесь , переменная PATH имеет разные пути в зависимости от того, как приложение активировано.

  • Какие установочные файлы (.bashrc, .profile, ...) должны иметь одинаковую переменную PATH, независимо от того, как я запускаю программу с помощью bash?
prosseek
источник

Ответы:

15

Традиционно место для определения пользовательских переменных среды в системах Unix есть ~/.profile. Этот файл считывается оболочкой входа (т.е. программой, которая запускается при входе в систему и в которую можно вводить команды), при условии, что оболочка входа является Bourne-совместимой оболочкой.

Bash - это Bourne-совместимая оболочка. Когда он вызывается как оболочка входа в систему, он читает, существует ~/.bash_profileли этот файл, и ~/.profileесли ~/.bash_profileон не существует.

Как правило, если вы вводите свой пароль в текстовом режиме (например, в текстовой консоли или удаленно с помощью ssh), то полученная оболочка является оболочкой входа в систему.

Однако, если вы вводите свой пароль в графической программе и входите в графическую среду, это обходит обычную оболочку входа в систему. Если .profileчитается в этом случае зависит от того, как графический сеанс настройки; например, он варьируется между дистрибутивами Linux, между дисплеями и между средами рабочего стола. Иногда одна из программ в цепочке явно вызывает оболочку входа в систему; иногда одна из программ явно читает ~/.profile; и иногда ничего этого не происходит и ~/.profileне читается.

Чтобы дать пример изменчивости, насколько я могу судить по беглому взгляду на сценарии, в Ubuntu 10.04: если вы входите в систему с помощью kdm или lxdm, ~/.bash_profileчитается, если она существует, и ~/.profileиначе; если вы входите в систему с помощью gdm, только ~/.profileчтение; если вы входите в систему с xdm, ~/.profileне читается.

Все системы, которые я знаю, предоставляют какой-либо способ установки переменных среды для каждого пользователя. К сожалению, нет общего ответа.

Обратите внимание, что иногда вы увидите рекомендации по установке переменных среды ~/.bashrcили запуску оболочки входа в систему для каждого терминала в среде с графическим интерфейсом. Оба плохие идеи; Одной из причин является проблема, с которой вы столкнулись, а именно то, что переменные среды были доступны только в программах, запускаемых через терминал, а не в программах, запускаемых непосредственно с помощью значка, меню или сочетания клавиш.

Жиль "ТАК - перестань быть злым"
источник
Некоторые приложения вызывают интерактивные оболочки без входа в систему, что означает, что .profile и .bash_profile не читаются. Если вы хотите установить env vars для этих приложений, один из способов сделать это - установить их в .bashrc, даже если это не место для этого; см. github.com/mobile-shell/mosh/issues/102#issuecomment-12503646
Уильям
@William .profileчитается при входе в систему. Помещение переменных среды .bashrcне работает, и ваш сценарий показывает, что: (предположительно GUI) приложение, которое запускает эту оболочку, должно иметь переменные среды, но если вы их определяете .bashrc, это не т.
Жиль "ТАК - перестань быть злым"
mosh не GUI, это альтернатива ssh. Я не защищаю его поведение, просто пытаюсь помочь другим, которые сталкиваются с той же проблемой, что и я, и с другими, как описано в проблеме Github, которую я связал.
Уильям
2

Окончательный ответ находится в разделе справочной страницы bash на Bash Startup Files . «Когда запускается интерактивная оболочка, которая не является оболочкой входа в систему, Bash читает и выполняет команды из ~ / .bashrc, если этот файл существует».

Ответы на другие ваши вопросы указывают на то, что eshell на самом деле не работает bash. Emacs eshellнет bash. Предполагается, eshellчто загрузка .bashrcбудет такой же ошибочной, как zshи cshзагрузка .bashrc. Это другая оболочка.

Я вижу два варианта:

  1. Создайте свой собственный скрипт, который берет список каталогов и генерирует соответствующий код bash для bashи код elisp для eshell.
  2. Установите переменную окружения ESHELL или SHELL так, чтобы вы действительно запускали bash в emacs. Это то, чем я занимаюсь. Bash отлично работает в Emacs.

Вас также может заинтересовать обсуждение вопроса о добавлении каталога в путь без дубликатов .

Даг Харрис
источник
1

Установка вашего PATH в вашем ~ / .profile должна просто работать. Этот файл читается при входе в систему любой POSIX-совместимой или похожей на Bourne оболочкой, которую я знаю, включая bash. Если вы внесете изменения в этот файл, вам придется выйти и снова войти, чтобы изменения вступили в силу. Поскольку PATH является частью среды вашего процесса входа в систему, ее следует экспортировать в каждую оболочку, которую вы запускаете впоследствии.

garyjohn
источник