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

Я недавно обнаружил /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?

2 ответа

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

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

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

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

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

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

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

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

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

Другие вопросы по тегам