9

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

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

3 ответа3

14

Традиционно местом для определения пользовательских переменных среды в системах 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 или запуску оболочки входа в систему для каждого терминала в среде графического интерфейса. Оба плохие идеи; Одной из причин является проблема, с которой вы столкнулись, а именно то, что переменные среды были доступны только в программах, запускаемых через терминал, а не в программах, запускаемых непосредственно с помощью значка, меню или сочетания клавиш.

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 является частью среды вашего процесса входа в систему, ее следует экспортировать в каждую оболочку, которую вы запускаете впоследствии.

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