Переменные среды окружения в Linux: различия между версиями
Перейти к навигации
Перейти к поиску
Admin (обсуждение | вклад) |
Admin (обсуждение | вклад) |
||
| (не показано 7 промежуточных версий этого же участника) | |||
| Строка 1: | Строка 1: | ||
'''Работа с переменными''' | '''Работа с переменными''' | ||
<pre> | <pre> | ||
| − | # определение переменной (создание) | + | # определение внутренней переменной шела (создание) |
| − | + | myvar=some text | |
| − | # отмена определения переменной ( | + | # преобразование внутренней переменной шела в переменную среды окружения |
| − | + | export <переменная> [= <значение>] | |
| + | |||
| + | # вывод списка переменных среды окружения (экспортированных переменных) | ||
| + | export -p | ||
| + | |||
| + | # изменение значения переменной среды окружения (экспортированной переменной) не преобразует ее обратно во внутреннюю переменную | ||
| + | export myvar | ||
| + | myvar=some text | ||
| + | |||
| + | # отмена определения переменной | ||
| + | # применимо к внутренним переменным и переменным среды окружения (экспортированным переменным) | ||
| + | unset myvar | ||
# подстановка значения переменной | # подстановка значения переменной | ||
echo $my_var | echo $my_var | ||
echo ${my_var} | echo ${my_var} | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
</pre> | </pre> | ||
| − | '''При работе с переменными среды окружения важно понимать следующее:''' | + | '''При работе с переменными среды окружения важно понимать следующее (мое понимание, могу ошибаться):''' |
| − | # | + | # внутренние переменные шела не являются переменными среды окружения |
| − | # | + | # внутренняя переменная шела преобразуется в переменную среды окружения командой export |
| − | # | + | # в Linux нет глобальных переменных среды окружения |
| + | #* у каждого процесса свой независимый набор переменных среды окружения, который хранится в контексте процесса и доступен только ему | ||
| + | #* при создании дочернего процесса, системный вызов ядра ОС копирует в его контекст все переменные среды окружения родительского процесса (может зависеть от типа и параметров системного вызова) | ||
| + | #* по цепочке вызовов процесс может получать копии переменных определенных на вышестоящих уровнях, так распространяются копии "глобальных" переменных | ||
| + | '''Разные способы запуска скрипта''' | ||
<pre> | <pre> | ||
| − | # | + | # создается новый процесс шела, в его контекст копируются переменные среды окружения родительского процесса (экспортированные переменные) |
| − | # | + | ./myscript.sh # требуются права на выполнение файла скрипта |
| − | + | /path/to/myscript.sh # требуются права на выполнение файла скрипта | |
| − | + | /bin/bash myscript.sh # права на выполнение файла скрипта не требуются | |
| − | |||
| − | |||
| − | |||
| − | /bin/bash myscript.sh | ||
| − | # | + | # запуск скрипта в контексте текущего шела, новый процесс шела не создается, скрипту доступны все внутренние переменные шела определенные до его запуска |
| − | + | . myscript.sh # права на выполнение файла скрипта не требуются | |
| − | . myscript.sh | + | source myscript.sh # права на выполнение файла скрипта не требуются |
| − | source myscript.sh | ||
</pre> | </pre> | ||
Текущая версия на 02:49, 17 октября 2025
Работа с переменными
# определение внутренней переменной шела (создание)
myvar=some text
# преобразование внутренней переменной шела в переменную среды окружения
export <переменная> [= <значение>]
# вывод списка переменных среды окружения (экспортированных переменных)
export -p
# изменение значения переменной среды окружения (экспортированной переменной) не преобразует ее обратно во внутреннюю переменную
export myvar
myvar=some text
# отмена определения переменной
# применимо к внутренним переменным и переменным среды окружения (экспортированным переменным)
unset myvar
# подстановка значения переменной
echo $my_var
echo ${my_var}
При работе с переменными среды окружения важно понимать следующее (мое понимание, могу ошибаться):
- внутренние переменные шела не являются переменными среды окружения
- внутренняя переменная шела преобразуется в переменную среды окружения командой export
- в Linux нет глобальных переменных среды окружения
- у каждого процесса свой независимый набор переменных среды окружения, который хранится в контексте процесса и доступен только ему
- при создании дочернего процесса, системный вызов ядра ОС копирует в его контекст все переменные среды окружения родительского процесса (может зависеть от типа и параметров системного вызова)
- по цепочке вызовов процесс может получать копии переменных определенных на вышестоящих уровнях, так распространяются копии "глобальных" переменных
Разные способы запуска скрипта
# создается новый процесс шела, в его контекст копируются переменные среды окружения родительского процесса (экспортированные переменные) ./myscript.sh # требуются права на выполнение файла скрипта /path/to/myscript.sh # требуются права на выполнение файла скрипта /bin/bash myscript.sh # права на выполнение файла скрипта не требуются # запуск скрипта в контексте текущего шела, новый процесс шела не создается, скрипту доступны все внутренние переменные шела определенные до его запуска . myscript.sh # права на выполнение файла скрипта не требуются source myscript.sh # права на выполнение файла скрипта не требуются