HTML Diff
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>