& Ldquo; Указатели & Rdquo; с синтаксисом $ в / etc / environment

Допустимо ли иметь указатели в / etc / environment с использованием синтаксиса $ FOO? Сейчас моя / etc / environment выглядит следующим образом:

JAVA_HOME=/usr/lib/jvm/java-6-openjdk
MAVEN_HOME=/usr/bin/apache-maven/apache-maven-3.0.4
M2_HOME=$MAVEN_HOME
M2=$MAVEN_HOME/bin
PATH=/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:$JAVA_HOME/bin:$MAVEN_HOME/bin

Я не получаю ожидаемых результатов:

~$ echo $JAVA_HOME
/usr/lib/jvm/java-6-openjdk
~$ echo $MAVEN_HOME
/usr/bin/apache-maven/apache-maven-3.0.4
~$ echo $PATH
/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin/bin:/usr/games:$JAVA_HOME/bin:$MAVEN_HOME/bin
6
задан 12 June 2012 в 06:41

4 ответа

Я не нашел много документации по /etc/environment, но причина, по которой все работает не так, как вы ожидаете, заключается в том, что это «не файл сценария», и, следовательно, не обрабатывается оболочкой, поэтому ссылка на ранее -определенная переменная не работает. Это объясняет поведение, которое вы видите.

Вам лучше определить такие переменные среды в вашем доме, в .profile или .bashrc, или, если они вам нужны для всех пользователей, в /etc/profile.d или /etc/bash.bashrc.

Здесь есть довольно обширная документация по настройке переменных среды здесь , и она указывает на .profile или .bashrc в качестве предпочтительного места для размещения этого материала.

0
ответ дан 12 June 2012 в 06:41

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

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

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

Подробности:
Я опубликовал более длинный ответ на этот вопрос AskUbuntu

0
ответ дан 12 June 2012 в 06:41

Вы можете использовать указатели в /etc/environment, но должны использовать другой синтаксис:

try:

JAVA_HOME=/usr/lib/jvm/java-6-openjdk
MAVEN_HOME=/usr/bin/apache-maven/apache-maven-3.0.4
M2_HOME=${MAVEN_HOME}
M2=${MAVEN_HOME}/bin
PATH="/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:${JAVA_HOME}/bin:${MAVEN_HOME}/bin"

Используйте фигурные скобки {} вокруг имен переменных при обращении к другое назначение переменной. Поэтому вместо $JAVA_HOME используйте ${JAVA_HOME}. Также кажется необходимым заключить в кавычки значение переменной, в которой у вас есть указатель на другие переменные:

так PATH="... ${SOME_VAR} ..."

0
ответ дан 12 June 2012 в 06:41

Канонический источник для получения информации Вы ищете (по крайней мере, для ароматов Debian то использование SystemD; и производные этого, такие как современные версии Ubuntu), man 5 environment.d (некоторое форматирование в этой выборке было изменено по моему усмотрению для ясности):

Формат конфигурации

Конфигурационные файлы содержат список KEY=VALUE присвоения переменной среды, разделенные новыми строками. Правая сторона этих присвоений может сослаться на ранее определенные переменные среды, с помощью ${OTHER_KEY} и $OTHER_KEY формат. Также возможно использовать ${FOO:-DEFAULT_VALUE} расшириться таким же образом как ${FOO} если расширение не было бы пусто, в этом случае оно расширяется до DEFAULT_VALUE, и используйте ${FOO:+ALTERNATE_VALUE} расшириться до ALTERNATE_VALUE пока ${FOO} расширился бы до непустого значения. Никакие другие элементы синтаксиса оболочки не поддерживаются.

Каждый KEY должно быть допустимое имя переменной. Пустые строки и строки, начинающиеся с символа комментария # проигнорированы.

Пример

Пример 1. Среда установки для предоставления доступа к программе, установленной в /opt/foo

/etc/environment.d/60-foo.conf :–

FOO_DEBUG=force-software-gl,log-verbose
PATH=/opt/foo/bin:$PATH
LD_LIBRARY_PATH=/opt/foo/lib${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}
XDG_DATA_DIRS=/opt/foo/share:${XDG_DATA_DIRS:-/usr/local/share/:/usr/share/}
1
ответ дан 23 November 2019 в 07:29

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

Похожие вопросы: