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

18

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

Есть ли способ backreference переменные среды в / etc / environment?

    
задан Stefan Kendall 13.11.2011 в 16:38
источник

2 ответа

12

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

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

    
ответ дан Gilles 13.11.2011 в 17:10
2

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

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

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

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

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

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

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

    
ответ дан csi 02.12.2013 в 15:59