Ссылка на переменные окружения * в * / etc / environment?

19

Я недавно обнаружил /etc/environment, что кажется более стандартным способом установки простых переменных среды, чем сценарии, но мне было интересно, есть ли способ обратной ссылки на переменные среды в файле / etc / environment.

То есть у меня есть это:

JAVA_HOME="/tools/java"
GRAILS_HOME="/tools/grails"
GROOVY_HOME="/tools/groovy"
GRADLE_HOME="/tools/gradle"
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games"

Однако, если я пытаюсь добавить $JAVA_HOME/binопределение PATH, я получаю $ JAVA_HOME / bin, а не интерполированную переменную. Чтобы исправить это, я создаю environment.sh в profile.d, чтобы добавить /binзаписи в путь, но это кажется неаккуратным и неорганизованным.

Есть ли способ обратной ссылки на переменные окружения в / etc / environment?

Стефан Кендалл
источник

Ответы:

13

/etc/environmentФайл считывается pam_envмодулем PAM . Он поддерживает только простые пары ключ-значение без подстановок справа.

Если вы хотите построить значение с помощью подстановок или других расширений оболочки, вам нужно пройти через оболочку. /etc/profile(или файл в /etc/profile.d) это правильное место для них. Это традиционное место ( /etc/environmentотносительно недавнее новшество в истории Unix-систем), и в его использовании нет ничего небрежного. Основное преимущество /etc/environmentзаключается в том, что он позволяет устанавливать переменные среды даже при использовании методов входа в систему, в которых не используется оболочка, или для пользователей, которые используют оболочку, отличную от Bourne, но на практике они не распространены.

Жиль "ТАК - перестань быть злым"
источник
Без замены у вас останется много увольнений /etc/environment, я прибегнул к вам /etc/profile, спасибо за ваше предложение.
SAFX
2

Документация Ubuntu делает это невозможным. НО, есть ответ.

ОТВЕТ . Создайте постоянные общесистемные переменные среды в/etc/.bashrc

JAVA_HOME="/tools/java"
...
PATH="$JAVA_HOME:$PATH"  

Подробности:
Вот еще некоторые подробности из документации переменных среды .
Официальная рекомендация - использовать /etc/environment, как вы уже пробовали. Проблема в том, что этот файл не является файлом сценария. Другими словами, вы не можете использовать переменные в объявлениях переменных.

Документация продолжается с 2 другими файлами "Не рекомендуется"
/etc/profileи /etc/bash.bashrc.

/etc/profilemsgstr "делает чуть больше, чем вызывает файл /etc/bash.bashrc". Так что вместо этого выберите

/etc/bash.bashrc потому что «Ubuntu по умолчанию настроен на выполнение этого файла каждый раз, когда пользователь входит в оболочку или среду рабочего стола».

ЦСИ
источник
Я обновил EnvironmentVariables по согласованию с некоторыми разработчиками Ubuntu, так что этих «не рекомендуемых» утверждений больше нет.
Гуннар Хьялмарссон
msgstr "всякий раз, когда пользователь входит в оболочку". что делать, когда нет пользователя, чтобы войти в оболочку? Мне нужны переменные среды для моих автоматизированных пользователей, которые запускают программное обеспечение при запуске. Например, у меня только 6 строк конфигурации прокси. Что мне с этим делать?
эйс