@DarkByte2015

Как задавать переменные среды?

Почему-то для меня одной из самых сложных вещей в линуксе является задание различных переменных среды (напр. $PATH). Сложно для понимания потому-что в гугле сотни самых разных инструкций на этот счет. Я не понимаю ни где задается этот чертов $PATH по умолчанию, ни где он переопределяется, ни почему когда его переопределяешь через export $PATH и закрываешь консоль то при следующем открытии консоли значение опять старое... Пожалуйста объясните мне где определять переменные среды независимо от терминала (например я использую zsh, так что .bashrc не подходит). И еще нет ли какой-то утилиты с интерфейсом как в Windows для управления переменными среды? Была бы очень полезна.

Отдельный подвопрос. У меня стало openjdk, но мне понадобилась оракловская java и jdk. Скачал с офф сайта их (PPA не советовать - знаю что есть, но там старая версия), распаковал в домашнюю папку, но не понимаю как теперь сделать чтобы использовались именно они? Есть какой-то update-java-alternatives, но не понял как его использовать...
  • Вопрос задан
  • 890 просмотров
Пригласить эксперта
Ответы на вопрос 1
CityCat4
@CityCat4
//COPY01 EXEC PGM=IEBGENER
man bash в основном Вам в помощь. Там вообще говоря все достаточно подробно расписано, как происходит инициализация переменных, в каком порядке читаются настроечные файлы. Ман этот достаточно здоровый, но если его прочитать, многое становится ясным.

Первым читается и стартует /etc/profile (для login shell - той, что прописана в passwd или вызвана с ключом login shell-а)
Вторым (первым для не login shell) - читается и стартует /etc/bashrc (либо /etc/bash/bashrc)
Третьим (для login shell) - читается и стартует ~/.bash_profile
Четвертым (вторым для не login shell) - читается и стартует ~/.bashrc

Порядок этот крайне важен - скрипты, стартующие только при login shell, фактически стартуют один раз за сессию, скрипты же, стартующие без login shell - каждый раз. Второе, что крайне важно усвоить - модификация переменных окружения действует только до момента выхода из шелла, в котором она была сделана, если только значение переменной не передавалось "наверх" командой export. В bash_profile обычно используют export для передачи сформированного окружения всем программам в пользовательской сессии.

Здесь можно применять переменные - также как в обычном bash-скрипте. Например:
XDG_DATA_DIRS="$tdehome/share:$tderoot/share:/usr/share"; export XDG_DATA_DIRS
XDG_CONFIG_DIRS="/etc/xdg:$tdehome/share/config:$tderoot/share/config"; export XDG_CONFIG_DIRS
XDG_DATA_HOME="$tdehome/share"; export XDG_DATA_HOME
XDG_CONFIG_HOME="$tdehome/share/config"; export XDG_CONFIG_HOME
XDG_CACHE_HOME="$tdehome/spool/tdecache-$USER"; export XDG_CACHE_HOME
XCURSOR_PATH="$tdehome/share/cursors:/usr/share/icons"; export XCURSOR_PATH
XDG_RUNTIME_DIR="/run/user/${uid:q}"; export XDG_RUNTIME_DIR


(кусок вполне реального .bash.profile)

я использую zsh


man zsh

нет ли какой-то утилиты с интерфейсом как в Windows


Если хотите в линухе надолго и всерьез - первое, что нужно отучиться - искать утилиту "как в Windows". Это долго, трудно, сам так попадал не раз - но надо, потому что многих вещей "как в Windows" нету не потому что сложно сделать - а потому что никому не надо
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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