1 added
1 removed
Original
2026-01-01
Modified
2026-02-26
1
<p>В этой статье будет описано взаимодействие с окружением, а также чтение и установка переменных окружения и оболочки напрямую и через конфигурационные файлы. Все дальнейшие действия должны быть релевантны на любой системе Linux.</p>
1
<p>В этой статье будет описано взаимодействие с окружением, а также чтение и установка переменных окружения и оболочки напрямую и через конфигурационные файлы. Все дальнейшие действия должны быть релевантны на любой системе Linux.</p>
2
<h2>Содержание</h2>
2
<h2>Содержание</h2>
3
<ul><li><a>Введение</a></li>
3
<ul><li><a>Введение</a></li>
4
<li><a>Как работает окружение и его переменные</a></li>
4
<li><a>Как работает окружение и его переменные</a></li>
5
<li><a>Вывод переменных оболочки и окружения</a></li>
5
<li><a>Вывод переменных оболочки и окружения</a></li>
6
<li><a>Установка переменных окружения и оболочки</a></li>
6
<li><a>Установка переменных окружения и оболочки</a></li>
7
<li><a>Отвязка переменных</a></li>
7
<li><a>Отвязка переменных</a></li>
8
<li><a>Установка переменных окружения по логину</a></li>
8
<li><a>Установка переменных окружения по логину</a></li>
9
<li><a>Заключение</a></li>
9
<li><a>Заключение</a></li>
10
</ul><h2>Введение</h2>
10
</ul><h2>Введение</h2>
11
<p>Когда происходит взаимодействие через сессию оболочки, имеется множество информации, которую консольная оболочка обрабатывает для определения своего поведения и доступа к сторонним ресурсам. Некоторые из этих настроек находятся в конфигурационных настройках, а другие определены самим пользователем.</p>
11
<p>Когда происходит взаимодействие через сессию оболочки, имеется множество информации, которую консольная оболочка обрабатывает для определения своего поведения и доступа к сторонним ресурсам. Некоторые из этих настроек находятся в конфигурационных настройках, а другие определены самим пользователем.</p>
12
<p>Место, в котором оболочка держит пути всех этих настроек, называется<strong>окружением</strong>. Окружение - это место, которое оболочка определяет каждый раз, когда запускается сессия. В ней заключены переменные, созданные свойствами системы.</p>
12
<p>Место, в котором оболочка держит пути всех этих настроек, называется<strong>окружением</strong>. Окружение - это место, которое оболочка определяет каждый раз, когда запускается сессия. В ней заключены переменные, созданные свойствами системы.</p>
13
<h2>Как работает окружение и его переменные</h2>
13
<h2>Как работает окружение и его переменные</h2>
14
<p>Окружение обеспечивает набор переменных, через которые оболочка может получать или определять настройки, и пропускать их через дочерние процессы. Различные системные и пользовательские файлы могут обращаться к окружению.</p>
14
<p>Окружение обеспечивает набор переменных, через которые оболочка может получать или определять настройки, и пропускать их через дочерние процессы. Различные системные и пользовательские файлы могут обращаться к окружению.</p>
15
<p>Окружение реализовано как строка, состоящая из пары ключ-значение. Если определяется несколько значений, то они последовательно разделены знаком двоеточия. Каждая пара будет выглядеть как:</p>
15
<p>Окружение реализовано как строка, состоящая из пары ключ-значение. Если определяется несколько значений, то они последовательно разделены знаком двоеточия. Каждая пара будет выглядеть как:</p>
16
<p>Если значение содержит пробелы, тогда используют кавычки</p>
16
<p>Если значение содержит пробелы, тогда используют кавычки</p>
17
<p>Ключами в данных примерах являются переменные. Они могут быть одним из двух типов: переменной окружения и переменной оболочки.</p>
17
<p>Ключами в данных примерах являются переменные. Они могут быть одним из двух типов: переменной окружения и переменной оболочки.</p>
18
<p><strong>Переменные окружения</strong>это переменные, определенные для текущей оболочки - они наследуются любым потомком оболочки и запущенного процесса. Эти переменные используются, чтобы пропускать информацию в процессы, которые образуются от самой оболочки.</p>
18
<p><strong>Переменные окружения</strong>это переменные, определенные для текущей оболочки - они наследуются любым потомком оболочки и запущенного процесса. Эти переменные используются, чтобы пропускать информацию в процессы, которые образуются от самой оболочки.</p>
19
<p><strong>Переменные оболочки</strong>это переменные, которые содержатся исключительно в оболочке, где они были определены или установлены. Они часто используются для хранения путей, например, как текущая рабочая директория.</p>
19
<p><strong>Переменные оболочки</strong>это переменные, которые содержатся исключительно в оболочке, где они были определены или установлены. Они часто используются для хранения путей, например, как текущая рабочая директория.</p>
20
<p>По правилам - эти типы переменных определяются, используя заглавные символы. Эта особенность помогает пользователям определять контекст употребления переменных.</p>
20
<p>По правилам - эти типы переменных определяются, используя заглавные символы. Эта особенность помогает пользователям определять контекст употребления переменных.</p>
21
<h2>Вывод переменных оболочки и окружения</h2>
21
<h2>Вывод переменных оболочки и окружения</h2>
22
<p>Каждая сессия оболочки хранит пути своих собственных переменных и переменных окружения. Их достигнуть можно разными способами.</p>
22
<p>Каждая сессия оболочки хранит пути своих собственных переменных и переменных окружения. Их достигнуть можно разными способами.</p>
23
<p>Можно распечатать список всех переменных окружения используя env или printenv. По умолчанию они должны делать все то же самое:</p>
23
<p>Можно распечатать список всех переменных окружения используя env или printenv. По умолчанию они должны делать все то же самое:</p>
24
<p>Как правило, этот вывод довольно типичен для обоих команд. Различия между ними в функциональности. Например, в printenv можно запрашивать значения определенной переменной.</p>
24
<p>Как правило, этот вывод довольно типичен для обоих команд. Различия между ними в функциональности. Например, в printenv можно запрашивать значения определенной переменной.</p>
25
<p>С другой стороны env позволяет изменять окружение, указывая определение переменной. Например:</p>
25
<p>С другой стороны env позволяет изменять окружение, указывая определение переменной. Например:</p>
26
<p>Дочерние процессы, как правило, наследуют переменные окружения от родительского процесса, и это дает возможность переписывать значения или добавлять дополнительные переменные для потомков.</p>
26
<p>Дочерние процессы, как правило, наследуют переменные окружения от родительского процесса, и это дает возможность переписывать значения или добавлять дополнительные переменные для потомков.</p>
27
<p>Если посмотреть на вывод команды printenv, то там есть несколько переменных окружения, которые установлены через нашу файловую систему и процессов без нашего ввода.</p>
27
<p>Если посмотреть на вывод команды printenv, то там есть несколько переменных окружения, которые установлены через нашу файловую систему и процессов без нашего ввода.</p>
28
<p>Это были переменные окружения, но выглядят как переменные консольной оболочки.</p>
28
<p>Это были переменные окружения, но выглядят как переменные консольной оболочки.</p>
29
<p>Существует команда set, которую можно использовать для отображения. Если ввести set без дополнительных параметров, будет выводиться список всех переменных консольной оболочки, переменные окружения, локальные переменные и функции оболочки:</p>
29
<p>Существует команда set, которую можно использовать для отображения. Если ввести set без дополнительных параметров, будет выводиться список всех переменных консольной оболочки, переменные окружения, локальные переменные и функции оболочки:</p>
30
<p>Вывод этой команды довольно огромен. Для удобства работы с этими переменными можно использовать пейджеры more или less.</p>
30
<p>Вывод этой команды довольно огромен. Для удобства работы с этими переменными можно использовать пейджеры more или less.</p>
31
<p>В принципе, отсутствует особая необходимость знать все функции, определенные для bash. Поэтому - можно очистить вывод, указав, что set должен проводить операции в режиме POSIX, которые опускают отображение функций консольной оболочки. Это можно выполнить в дочерней оболочке, чтобы наше текущее окружение оставалось прежним:</p>
31
<p>В принципе, отсутствует особая необходимость знать все функции, определенные для bash. Поэтому - можно очистить вывод, указав, что set должен проводить операции в режиме POSIX, которые опускают отображение функций консольной оболочки. Это можно выполнить в дочерней оболочке, чтобы наше текущее окружение оставалось прежним:</p>
32
<p>Возникнет список всех определенных переменных окружения и оболочки.</p>
32
<p>Возникнет список всех определенных переменных окружения и оболочки.</p>
33
<p>Можно попробовать сравнить этот вывод с выводом команд env или printenv, тем самым получив список только переменных оболочки. Возможно, вывод будет довольно кривым:</p>
33
<p>Можно попробовать сравнить этот вывод с выводом команд env или printenv, тем самым получив список только переменных оболочки. Возможно, вывод будет довольно кривым:</p>
34
<p>Отображение будет до сих пор включать несколько переменных окружения, в связи с тем фактом, что set команда выводит значения в кавычках, в то время как команды printenv и env показывают значения, опуская их.</p>
34
<p>Отображение будет до сих пор включать несколько переменных окружения, в связи с тем фактом, что set команда выводит значения в кавычках, в то время как команды printenv и env показывают значения, опуская их.</p>
35
<p>Все это должно давать правильное понимание переменных окружения и оболочки.</p>
35
<p>Все это должно давать правильное понимание переменных окружения и оболочки.</p>
36
<p>Эти переменные используются для всех необходимых вещей. Они обеспечивают альтернативный способ определения постоянных значений для сессии - между процессами, тем самым избегая изменений в файле.</p>
36
<p>Эти переменные используются для всех необходимых вещей. Они обеспечивают альтернативный способ определения постоянных значений для сессии - между процессами, тем самым избегая изменений в файле.</p>
37
<h3>Общие переменные окружения и консольной оболочки</h3>
37
<h3>Общие переменные окружения и консольной оболочки</h3>
38
<p>Некоторые переменные окружения и оболочки очень полезны и к ним часто обращаются. Здесь перечислены общие переменные окружения, которые зачастую используются:</p>
38
<p>Некоторые переменные окружения и оболочки очень полезны и к ним часто обращаются. Здесь перечислены общие переменные окружения, которые зачастую используются:</p>
39
<ul><li><p><strong>SHELL</strong>: отображает путь к оболочке, которая занимается интерпретацией тех или иных команд, которые вводит пользователь. Как правило, по умолчанию, это будет интерпретатор bash, но возможно и применение других значений, которые можно указать.</p>
39
<ul><li><p><strong>SHELL</strong>: отображает путь к оболочке, которая занимается интерпретацией тех или иных команд, которые вводит пользователь. Как правило, по умолчанию, это будет интерпретатор bash, но возможно и применение других значений, которые можно указать.</p>
40
</li>
40
</li>
41
<li><p><strong>TERM</strong>: указывает тип терминала, который эмулируется, когда запускается консольная оболочка. Могут эмулироваться различные терминалы для необходимых операционных требований.</p>
41
<li><p><strong>TERM</strong>: указывает тип терминала, который эмулируется, когда запускается консольная оболочка. Могут эмулироваться различные терминалы для необходимых операционных требований.</p>
42
</li>
42
</li>
43
<li><p><strong>USER</strong>: имя текущего пользователя оболочки.</p>
43
<li><p><strong>USER</strong>: имя текущего пользователя оболочки.</p>
44
</li>
44
</li>
45
<li><p><strong>PWD</strong>: переменная отображает значение текущей рабочей директории.</p>
45
<li><p><strong>PWD</strong>: переменная отображает значение текущей рабочей директории.</p>
46
</li>
46
</li>
47
<li><p><strong>OLDPWD</strong>: предыдущая рабочая директория. Оболочка держит эту переменную для обратного переключения, когда запускается команда cd -.</p>
47
<li><p><strong>OLDPWD</strong>: предыдущая рабочая директория. Оболочка держит эту переменную для обратного переключения, когда запускается команда cd -.</p>
48
</li>
48
</li>
49
<li><p><strong>LS_COLORS</strong>: определяет цвет кодов, которые используются для вывода команды ls. Чтобы различать типы файлов и директорий.</p>
49
<li><p><strong>LS_COLORS</strong>: определяет цвет кодов, которые используются для вывода команды ls. Чтобы различать типы файлов и директорий.</p>
50
</li>
50
</li>
51
<li><p><strong>MAIL</strong>: отображает электронную почту текущего пользователя.</p>
51
<li><p><strong>MAIL</strong>: отображает электронную почту текущего пользователя.</p>
52
</li>
52
</li>
53
<li><p><strong>PATH</strong>: список директорий, которые будет проверять система, когда будет идти обращение к той или иной команде. Когда пользователь вводит команду, система смотрит указанные директории, в последовательном порядке.</p>
53
<li><p><strong>PATH</strong>: список директорий, которые будет проверять система, когда будет идти обращение к той или иной команде. Когда пользователь вводит команду, система смотрит указанные директории, в последовательном порядке.</p>
54
</li>
54
</li>
55
<li><p><strong>LANG</strong>: текущий язык и локализационные настройки, включая кодировку символов.</p>
55
<li><p><strong>LANG</strong>: текущий язык и локализационные настройки, включая кодировку символов.</p>
56
</li>
56
</li>
57
<li><p><strong>HOME</strong>: текущая домашняя директория пользователя.</p>
57
<li><p><strong>HOME</strong>: текущая домашняя директория пользователя.</p>
58
</li>
58
</li>
59
<li><p><strong>_</strong>: отображает вывод последней запущенной команды.</p>
59
<li><p><strong>_</strong>: отображает вывод последней запущенной команды.</p>
60
</li>
60
</li>
61
</ul><p>В дополнение к этим переменным окружения, имеются некоторые переменные оболочки, которые также будут часто встречаться:</p>
61
</ul><p>В дополнение к этим переменным окружения, имеются некоторые переменные оболочки, которые также будут часто встречаться:</p>
62
<ul><li><p><strong>BASHOPTS</strong>: список опций, которые используются при запуске bash. Это может быть полезно для выяснения, каким конкретно способом будет оперировать консольная оболочка.</p>
62
<ul><li><p><strong>BASHOPTS</strong>: список опций, которые используются при запуске bash. Это может быть полезно для выяснения, каким конкретно способом будет оперировать консольная оболочка.</p>
63
</li>
63
</li>
64
<li><p><strong>BASH_VERSION</strong>: отображает конкретную версию bash.</p>
64
<li><p><strong>BASH_VERSION</strong>: отображает конкретную версию bash.</p>
65
</li>
65
</li>
66
<li><p><strong>BASH_VERSINFO</strong>: мажорная версия bash.</p>
66
<li><p><strong>BASH_VERSINFO</strong>: мажорная версия bash.</p>
67
</li>
67
</li>
68
<li><p><strong>COLUMNS</strong>: число колон, используемых для отображения вывода в оболочке.</p>
68
<li><p><strong>COLUMNS</strong>: число колон, используемых для отображения вывода в оболочке.</p>
69
</li>
69
</li>
70
<li><p><strong>DIRSTACK</strong>: директории, которые доступны для команд pushd и popd.</p>
70
<li><p><strong>DIRSTACK</strong>: директории, которые доступны для команд pushd и popd.</p>
71
</li>
71
</li>
72
<li><p><strong>HISTFILESIZE</strong>: количество линий, хранящиеся в файле истории набранных команд.</p>
72
<li><p><strong>HISTFILESIZE</strong>: количество линий, хранящиеся в файле истории набранных команд.</p>
73
</li>
73
</li>
74
<li><p><strong>HISTSIZE</strong>: количество линий, которые можно хранить в памяти.</p>
74
<li><p><strong>HISTSIZE</strong>: количество линий, которые можно хранить в памяти.</p>
75
</li>
75
</li>
76
<li><p><strong>HOSTNAME</strong>: имя компьютера системы на данный момент.</p>
76
<li><p><strong>HOSTNAME</strong>: имя компьютера системы на данный момент.</p>
77
</li>
77
</li>
78
<li><p><strong>IFS</strong>: внутренний разделитель поля в командной строке. По умолчанию - это пробел.</p>
78
<li><p><strong>IFS</strong>: внутренний разделитель поля в командной строке. По умолчанию - это пробел.</p>
79
</li>
79
</li>
80
<li><p><strong>PS1</strong>: строка приглашения на ввод. Эта переменная используется для того, чтобы определить, как будет выглядеть эта строка. Еще есть вторая строка PS2 которая используется, когда команда многострочная.</p>
80
<li><p><strong>PS1</strong>: строка приглашения на ввод. Эта переменная используется для того, чтобы определить, как будет выглядеть эта строка. Еще есть вторая строка PS2 которая используется, когда команда многострочная.</p>
81
</li>
81
</li>
82
<li><p><strong>SHELLOPTS</strong>: опции оболочки, которые можно определять с помощью команды set.</p>
82
<li><p><strong>SHELLOPTS</strong>: опции оболочки, которые можно определять с помощью команды set.</p>
83
</li>
83
</li>
84
<li><p><strong>UID</strong>: идентификатор текущего пользователя.</p>
84
<li><p><strong>UID</strong>: идентификатор текущего пользователя.</p>
85
</li>
85
</li>
86
</ul><h2>Установка переменных окружения и оболочки</h2>
86
</ul><h2>Установка переменных окружения и оболочки</h2>
87
<p>Для лучшего понимания различий между двумя видами переменных и представления синтаксиса их определения, мы покажем примеры этого процесса.</p>
87
<p>Для лучшего понимания различий между двумя видами переменных и представления синтаксиса их определения, мы покажем примеры этого процесса.</p>
88
<h3>Создание переменной оболочки</h3>
88
<h3>Создание переменной оболочки</h3>
89
<p>Определение этой переменной будет происходить в пределах текущей сессии консольной оболочки.</p>
89
<p>Определение этой переменной будет происходить в пределах текущей сессии консольной оболочки.</p>
90
<p>Кавычки здесь используются, поскольку значение переменной содержит пробел. В дальнейшем будут использоваться одинарные кавычки - это позволит сделать так, что особые знаки в bash будут правильно отображаться.</p>
90
<p>Кавычки здесь используются, поскольку значение переменной содержит пробел. В дальнейшем будут использоваться одинарные кавычки - это позволит сделать так, что особые знаки в bash будут правильно отображаться.</p>
91
<p>Определенная выше переменная теперь доступна в текущей сессии, но в дочернем процессе она будет отсутствовать. Увидеть ее можно при помощи команды grep на вывод set:</p>
91
<p>Определенная выше переменная теперь доступна в текущей сессии, но в дочернем процессе она будет отсутствовать. Увидеть ее можно при помощи команды grep на вывод set:</p>
92
<p>Если запустить команду exit, тогда оболочка выходит на родительскую сессию, в которой уже определена данная работающая переменная. Также можно убедиться в отсутствии данной переменной в окружении, сделав ту же проверку:</p>
92
<p>Если запустить команду exit, тогда оболочка выходит на родительскую сессию, в которой уже определена данная работающая переменная. Также можно убедиться в отсутствии данной переменной в окружении, сделав ту же проверку:</p>
93
<p>Чтобы получить значение той или иной переменной, используется следующая конструкция:</p>
93
<p>Чтобы получить значение той или иной переменной, используется следующая конструкция:</p>
94
<p>Команда echo делает вывод введенной строки как аргумента. Но, в данном случае применяется знак $, в совокупности с ключом переменной, который возвращает ее значение.</p>
94
<p>Команда echo делает вывод введенной строки как аргумента. Но, в данном случае применяется знак $, в совокупности с ключом переменной, который возвращает ее значение.</p>
95
<h3>Создание переменной окружения</h3>
95
<h3>Создание переменной окружения</h3>
96
<p>Чтобы обернуть созданную переменную оболочки в переменную окружения, можно ее экспортировать:</p>
96
<p>Чтобы обернуть созданную переменную оболочки в переменную окружения, можно ее экспортировать:</p>
97
<p>Если создать новую дочернюю сессию, то можно увидеть, что в ней также существует эта переменная:</p>
97
<p>Если создать новую дочернюю сессию, то можно увидеть, что в ней также существует эта переменная:</p>
98
<p>Дочерний процесс принял переменную, созданную предыдущей сессией. Также можно попробовать определить переменную в текущем процессе и проверить ее наличие в родительском:</p>
98
<p>Дочерний процесс принял переменную, созданную предыдущей сессией. Также можно попробовать определить переменную в текущем процессе и проверить ее наличие в родительском:</p>
99
<p>Переменные окружения проходят только в дочерние процессы. Переменная NEW_VAR была определена в дочернем окружении переменных. Она была бы также доступна любым другим дочерним сессиям от этой текущей. Вернувшись обратно - в основную сессию, - через команду exit, предыдущее окружение вместе с этой переменной было стерто.</p>
99
<p>Переменные окружения проходят только в дочерние процессы. Переменная NEW_VAR была определена в дочернем окружении переменных. Она была бы также доступна любым другим дочерним сессиям от этой текущей. Вернувшись обратно - в основную сессию, - через команду exit, предыдущее окружение вместе с этой переменной было стерто.</p>
100
<h2>Отвязка переменных</h2>
100
<h2>Отвязка переменных</h2>
101
<p>На данный момент переменная TEST_VAR находится в окружении. По необходимости можно делать отвязку переменных.</p>
101
<p>На данный момент переменная TEST_VAR находится в окружении. По необходимости можно делать отвязку переменных.</p>
102
<p>Теперь, если посмотреть в окружение, то удаленная переменная там будет отсутствовать.</p>
102
<p>Теперь, если посмотреть в окружение, то удаленная переменная там будет отсутствовать.</p>
103
<p>При этом она до сих пор существует в переменной оболочки:</p>
103
<p>При этом она до сих пор существует в переменной оболочки:</p>
104
<p>Если возникает потребность окончательно сделать отвязку переменной из оболочки и окружения, то можно применить команду unset:</p>
104
<p>Если возникает потребность окончательно сделать отвязку переменной из оболочки и окружения, то можно применить команду unset:</p>
105
<p>Проверить результат команды можно с помощью echo:</p>
105
<p>Проверить результат команды можно с помощью echo:</p>
106
<p>Отсутствует какое-либо возвращаемое значение, потому что переменная была отвязана.</p>
106
<p>Отсутствует какое-либо возвращаемое значение, потому что переменная была отвязана.</p>
107
<h2>Установка переменных окружения по логину</h2>
107
<h2>Установка переменных окружения по логину</h2>
108
<p>Как упоминалось выше, множество программ используют переменные окружения, чтобы решать, как конкретно производить операции. И вместо того, чтобы каждый раз делать вручную определение всех переменных, лучше определять переменные автоматически.</p>
108
<p>Как упоминалось выше, множество программ используют переменные окружения, чтобы решать, как конкретно производить операции. И вместо того, чтобы каждый раз делать вручную определение всех переменных, лучше определять переменные автоматически.</p>
109
<p>На самом деле, это более сложная проблема, чем кажется сперва, поскольку различные конфигурационные файлы, которые bash читает при запуске - и это зависит от того, как все запущено.</p>
109
<p>На самом деле, это более сложная проблема, чем кажется сперва, поскольку различные конфигурационные файлы, которые bash читает при запуске - и это зависит от того, как все запущено.</p>
110
<h3>Различие между логин, не-логин, интерактивной и не-интерактивной сессией оболочки</h3>
110
<h3>Различие между логин, не-логин, интерактивной и не-интерактивной сессией оболочки</h3>
111
<p>Bash оболочка читает различные конфигурационные файлы в зависимости от того, какая сессия запущена.</p>
111
<p>Bash оболочка читает различные конфигурационные файлы в зависимости от того, какая сессия запущена.</p>
112
<p><strong>Логин-сессия</strong>оболочки запускается по аутентификации пользователя. Если пользователь входит в сессию терминала или через SSH и аутентифицируется, тогда эта сессия оболочки будет определена как логин-оболочка.</p>
112
<p><strong>Логин-сессия</strong>оболочки запускается по аутентификации пользователя. Если пользователь входит в сессию терминала или через SSH и аутентифицируется, тогда эта сессия оболочки будет определена как логин-оболочка.</p>
113
<p>Если начинается новая сессия bash-оболочки в пределах аутентифицированной сессии, подобно вызову команды bash из консоли, тогда такая оболочка определяется без логина и сразу запускается.</p>
113
<p>Если начинается новая сессия bash-оболочки в пределах аутентифицированной сессии, подобно вызову команды bash из консоли, тогда такая оболочка определяется без логина и сразу запускается.</p>
114
-
<p>Помимо этих типов сессий, существуют интерактивный и не-интерактивный подход. Первый прикрепляется к терминалу, второй же - наоборот.</p>
114
+
<p>Помимо этих типов сессий, существуют интерактивный и не-интерактивный подход. Первый прикрепляется к т��рминалу, второй же - наоборот.</p>
115
<p>Таким образом сессии оболочки могут различаться по этим двум типам.</p>
115
<p>Таким образом сессии оболочки могут различаться по этим двум типам.</p>
116
<p>Обычная сессия, начинающаяся с SSH, обычно является интерактивной оболочкой с логином. Скрипты, запускающиеся из командной строки, обычно являют собой не-интерактивной и не-логин оболочкой. Терминальная сессия может быть составлена из любых комбинаций этих двух свойств.</p>
116
<p>Обычная сессия, начинающаяся с SSH, обычно является интерактивной оболочкой с логином. Скрипты, запускающиеся из командной строки, обычно являют собой не-интерактивной и не-логин оболочкой. Терминальная сессия может быть составлена из любых комбинаций этих двух свойств.</p>
117
<p>В независимости от того, какая сессия определена как логин или не-логин, существуют некоторые заявления, по которым происходит инициализация сессии оболочки.</p>
117
<p>В независимости от того, какая сессия определена как логин или не-логин, существуют некоторые заявления, по которым происходит инициализация сессии оболочки.</p>
118
<p>Логин сессия при запуске в первую очередь будет читать конфигурационные заявления из файла /etc/profile. Затем она будет смотреть данные в первом конфигурационном файле и пользовательской домашней директории, чтобы получить особые настройки пользователя.</p>
118
<p>Логин сессия при запуске в первую очередь будет читать конфигурационные заявления из файла /etc/profile. Затем она будет смотреть данные в первом конфигурационном файле и пользовательской домашней директории, чтобы получить особые настройки пользователя.</p>
119
<p>Читаются исключительно файлы, которые располагаются в ~/.bash_profile, ~/.bash_login и ~/.profile.</p>
119
<p>Читаются исключительно файлы, которые располагаются в ~/.bash_profile, ~/.bash_login и ~/.profile.</p>
120
<p>В не-логин сессии оболочка читает файл /etc/bash.bashrc и пользовательский ~/.bashrc файл для построения своего окружения.</p>
120
<p>В не-логин сессии оболочка читает файл /etc/bash.bashrc и пользовательский ~/.bashrc файл для построения своего окружения.</p>
121
<p>Не-интерактивные оболочки читают переменную окружения под названием BASH_ENV и читают указанный файл, чтобы определить новое окружение.</p>
121
<p>Не-интерактивные оболочки читают переменную окружения под названием BASH_ENV и читают указанный файл, чтобы определить новое окружение.</p>
122
<h3>Реализация переменных окружения</h3>
122
<h3>Реализация переменных окружения</h3>
123
<p>Как можно увидеть выше, существуют различные отдельные файлы для настроек.</p>
123
<p>Как можно увидеть выше, существуют различные отдельные файлы для настроек.</p>
124
<p>Это обеспечивает гибкость, которая может помочь в особых ситуациях, где будут необходимы конкретные настройки для логин и не-логин оболочки. Хотя, обычно, настройки одинаковы в обоих ситуациях.</p>
124
<p>Это обеспечивает гибкость, которая может помочь в особых ситуациях, где будут необходимы конкретные настройки для логин и не-логин оболочки. Хотя, обычно, настройки одинаковы в обоих ситуациях.</p>
125
<p>Большинство Linux-дистрибутивов производят конфигурацию файлов к источнику не-залогиненых конфигурационных файлов. Это значит, что можно определять окружение переменных внутри них. И они будут прочитаны в обоих случаях.</p>
125
<p>Большинство Linux-дистрибутивов производят конфигурацию файлов к источнику не-залогиненых конфигурационных файлов. Это значит, что можно определять окружение переменных внутри них. И они будут прочитаны в обоих случаях.</p>
126
<p>Обычно в конфигурациях указываются особые переменные окружения для пользовательских нужд. Эти настройки указываются в ~/.bashrc файле.</p>
126
<p>Обычно в конфигурациях указываются особые переменные окружения для пользовательских нужд. Эти настройки указываются в ~/.bashrc файле.</p>
127
<p>Внутри этого файла будет уже содержаться определенные данные. Большинство из определений нужны для настройки bash-опций, которые мало связаны с окружением переменных. Переменные внутри файла устанавливаются так же, как и в командной оболочке:</p>
127
<p>Внутри этого файла будет уже содержаться определенные данные. Большинство из определений нужны для настройки bash-опций, которые мало связаны с окружением переменных. Переменные внутри файла устанавливаются так же, как и в командной оболочке:</p>
128
<p>export VARNAME=value</p>
128
<p>export VARNAME=value</p>
129
<p>Любое новое окружение переменных может быть добавленно в этот файл. Желательно добавлять новые данные в конец файла - это позволит быстрее их найти в случае, если нужно что-либо изменить. При следующем запуске оболочки, после изменения этого файла, указанные переменные будут прочитаны и пропущены в окружение оболочки. Возможно также и текущую сессию обновить, прочитав файл, введя следующую команду:</p>
129
<p>Любое новое окружение переменных может быть добавленно в этот файл. Желательно добавлять новые данные в конец файла - это позволит быстрее их найти в случае, если нужно что-либо изменить. При следующем запуске оболочки, после изменения этого файла, указанные переменные будут прочитаны и пропущены в окружение оболочки. Возможно также и текущую сессию обновить, прочитав файл, введя следующую команду:</p>
130
<p>Если необходимо установить системные переменные, то можно добавить их в /etc/profile, /etc/bash.bashrc или /etc/environment.</p>
130
<p>Если необходимо установить системные переменные, то можно добавить их в /etc/profile, /etc/bash.bashrc или /etc/environment.</p>
131
<h2>Заключение</h2>
131
<h2>Заключение</h2>
132
<p>Переменные окружения и оболочки всегда представляются в сессиях оболочки и могут быть довольно полезными. Они являются интересным способом установки конфигурационных деталей родительских процессов для их дочерних, а также позволяют удобно производить настройку через внешние файлы.</p>
132
<p>Переменные окружения и оболочки всегда представляются в сессиях оболочки и могут быть довольно полезными. Они являются интересным способом установки конфигурационных деталей родительских процессов для их дочерних, а также позволяют удобно производить настройку через внешние файлы.</p>
133
<p>Существуют различные сценарии, по которым необходимо читать окружение на системе. Эти инструменты и приемы должны дать хорошее основание для создания этих изменений и корректное их использование.</p>
133
<p>Существуют различные сценарии, по которым необходимо читать окружение на системе. Эти инструменты и приемы должны дать хорошее основание для создания этих изменений и корректное их использование.</p>
134
<p>Статья была переведена<a>отсюда</a>.</p>
134
<p>Статья была переведена<a>отсюда</a>.</p>