Переменные среды окружения в Linux

Материал из sysadm
Перейти к навигации Перейти к поиску

Работа с переменными

# определение внутренней переменной шела (создание)
myvar=some text

# преобразование внутренней переменной шела в переменную среды окружения
export <переменная> [= <значение>]

# отмена определения переменной (удаление)
unset myvar

# подстановка значения переменной
echo $my_var
echo ${my_var}

При работе с переменными среды окружения важно понимать следующее (мое понимание, могу ошибаться):

  1. внутренние переменные шела не являются переменными среды окружения
  2. внутренняя переменная шела преобразуется в переменную среды окружения командой export
  3. в Linux нет глобальных переменных среды окружения
    • у каждого процесса свой независимый набор переменных среды окружения, который хранится в контексте процесса и доступен только ему
    • при создании дочернего процесса, системный вызов ядра ОС копирует в его контекст все переменные среды окружения родительского процесса (может зависеть от типа и параметров системного вызова)
    • по цепочке вызовов процесс может получать копии переменных определенных на вышестоящих уровнях, так распространяются копии "глобальных" переменных

Разные способы запуска скрипта

# создается новый процесс шела, в его контекст копируются переменные среды окружения родительского процесса (экспортированные переменные)
./myscript.sh          # требуются права на выполнение
/path/to/myscript.sh   # требуются права на выполнение
/bin/bash myscript.sh  # не требуются права на выполнение

# запуск скрипта в контексте текущего шела, новый процесс шела не создается, скрипту доступны все внутренние переменные шела определенные до его запуска
. myscript.sh
source myscript.sh