Как установить переменные среды в Bash в Linux фатмавати ахмад дзенури / ShutterstockВ Linux существует более одного типа переменных среды. Узнайте, как их увидеть, создать их для локального и удаленного входа и заставить их пережить перезагрузки.Как работают переменные средыКогда вы запускаете окно терминала и оболочка внутриссылка на коллекцию переменных обеспечивает правильную настройку оболочки. Эти переменные также обеспечивают доступность любой информации, к которой может понадобиться окно терминала и оболочка. В совокупности эти переменные содержат настройки, которые определяют среду, которую вы находите в окне терминала, вплоть до вида командной строки. Поэтому, естественно, они упоминаются как переменные среды. Некоторые переменные среды являются общесистемными или глобальными. Другие в течение сеанса и видны только вам. Другие не могут ссылаться на ваши переменные среды сеанса. В оболочке определен третий набор переменных среды. Ваш языковой стандарт, настройки часового пояса и клавиатуры, набор каталогов, в которых выполняется поиск, когда оболочка пытается найти команду, и ваш редактор по умолчанию, хранятся в переменных среды оболочки.Мы покажем вам, как увидеть переменные окружения, существующие в вашей системе, и опишем, как создать ваши собственные. Мы также покажем вам, как сделать их доступными для дочерних процессов и быть постоянными при перезагрузках.Программы для Windows, мобильные приложения, игры - ВСЁ БЕСПЛАТНО, в нашем закрытом телеграмм канале - Подписывайтесь:)Среды и НаследованиеКогда оболочка запускается, она проходит фазу инициализации. Именно в этот момент он считывает переменные окружения, которые определяют среду оболочки.Когда программа или команда запускается из этой оболочки, известной как дочерний процесс, она наследует среду родительского процесса, но будьте осторожны! Как мы увидим, вы можете создавать переменные, которые не добавляются в вашу среду, поэтому они не будут наследоваться дочерним процессом.Если дочерний процесс является оболочкой, эта оболочка будет инициализироваться из своего собственного свежего набора переменных. Таким образом, если вы измените командную строку в текущей оболочке, а затем запустите дочернюю оболочку, дочерняя оболочка не унаследует измененную командную строку родителя.Глобальные переменные средыПо соглашению переменным среды присваиваются имена в верхнем регистре. Вот некоторые из глобальных переменных среды, и что представляют собой значения, которые они содержат:РАКУШКА: Имя оболочки, которая запускается при открытии окна терминала. В большинстве дистрибутивов Linux это будет баш если вы не изменили его по умолчанию.СРОК: Окна терминала на самом деле эмулируют аппаратный терминал. Это содержит тип аппаратного терминала, который будет эмулироваться.USER: Имя пользователя текущего человека, использующего систему.PWD: Путь к текущему рабочему каталогу.OLDPWD: Каталог, в котором вы находились до перехода в текущий рабочий каталог.LS_COLORS: Список цветовых кодов, используемых ls выделить разные типы файлов,MAIL: Если mailНа вашем компьютере Linux установлена система (по умолчанию это не так), она будет содержать путь к почтовому ящику текущего пользователя,ДОРОЖКА: Список каталогов, по которым оболочка будет искать исполняемые файлы команд.LANG: Настройки языка, локализации и кодировки символов.ДОМ: Домашний каталог текущего пользователя._: Подчеркивание (_) переменная окружения содержит последнюю введенную команду.СВЯЗАННЫЕ С: Как использовать pushd и popd в Linux Мы можем видеть, что некоторые из них настроены на использование ничего более сложного, чем echo, который будет записать значения в окно терминала, Чтобы увидеть ценность удерживается переменной среды, вам нужно добавить знак доллара ($) к началу своего названия.Приятно, что вы можете использовать завершение вкладки заполнить имя переменной среды для вас. Введите несколько букв имени и нажмите Tab. Имя переменной заполняется оболочкой. Если этого не произойдет, вам нужно будет набрать еще несколько букв, чтобы отличить переменную среды от других команд, имена которых начинаются с тех же букв:echo $SHELLecho $LANGecho $HOMEecho $PWDЧтобы создать свой собственный Глобальный переменные среды, добавьте их в /etc/environment файл. Вам нужно использовать sudo редактировать этот файл:sudo gedit /etc/environment Чтобы добавить переменную среды, введите ее имя, знак равенства (=) и значение, которое вы хотите сохранить в переменной среды. Не ставьте пробел до или после знака равенства (=). Имя переменной окружения может содержать буквы, подчеркивание (_) или цифры. Однако первый символ имени не может быть числом.Если в значении есть пробелы, убедитесь, что вы заключили все значение в кавычки (").Сохраните файл, а затем выйдите и снова войдите в систему. использование echo чтобы проверить, что новая переменная существует и содержит значение, которое вы установили:echo $WEBSITEПотому что это глобальная переменная среды, доступная каждому mary может ссылаться на переменную окружения при следующем входе в систему:echo $WEBSITEк увидеть все переменные среды сразу наберите printenv, Выводов много, поэтому есть смысл передать его через sort, а затем в less:printenv | sort | lessСортированный список переменных среды отображается для нас в less,Мы можем передать вывод через grep искать переменные среды связанные с конкретной темой,printenv | grep GNOMEСВЯЗАННЫЕ С: Как редактировать текстовые файлы графически в Linux с помощью geditПеременные среды ShellВот некоторые из переменных среды оболочки, используемых в bash диктовать или записывать его поведение и функциональность. Некоторые значения обновляются при использовании терминала. Например, COLUMNS Переменная окружения будет обновлена с учетом изменений, которые вы можете внести в ширину окна терминала:BASHOPTS: Параметры командной строки, которые использовались при bash был запущен.BASH_VERSION: bash номер версии в виде строки слов и цифр.BASH_VERSINFO: bash версия в виде цифры.КОЛОННЫ: Текущая ширина окна терминала.DIRSTACK: Каталоги, которые были добавлен в стек каталогов посредством pushd команда.HISTFILESIZE: Максимальное количество линии разрешены в history файл.HISTSIZE: Количество строк history разрешено в памяти.HOSTNAME: Имя хоста компьютера.IFS: Внутренний разделитель полей используется для разделения ввода в командной строке. По умолчанию это пробел.PS1: PS1 Переменная окружения содержит определение основной, командной строки и командной строки. Набор токенов, называемых escape-последовательностями, может быть включен в определение вашей командной строки. Они представляют такие вещи, как имя хоста и пользователя, текущий рабочий каталог и время.PS2: Когда команда занимает более одной строки и ожидается больше ввода, отображается дополнительная командная строка. PS2 Переменная окружения содержит определение этого вторичного приглашения, которое по умолчанию имеет знак больше, чем (>).SHELLOPTS: Параметры оболочки, которые вы можете установить с помощью set вариант.UID: Идентификатор пользователя текущего пользователя.СВЯЗАННЫЕ С: Как использовать pushd и popd в LinuxДавайте проверим некоторые из этих переменных оболочки:echo $BASH_VERSIONecho $HOSTNAMEecho $COLUMNSecho $HISTFILESIZEecho $UIDДля полноты, вот токены, которые вы можете использовать в определениях командной строки: Т: Текущее время в формате ЧЧ: ММ: СС. D: Текущая дата, выраженная в виде дня недели, месяца, даты. П: Символ новой строки. S: Название вашей оболочки. W: Название вашего текущего рабочего каталога. Ш: Путь к вашему текущему рабочему каталогу. И: Имя пользователя, который вошел в систему.час: Имя хоста компьютера. #: Каждая команда в оболочке пронумерована. Это позволяет увидеть номер команды в командной строке. Это не то же самое, что число, которое будет иметь команда в history список. $: Устанавливает последний символ приглашения в знак доллара ($) для обычного пользователя и хеш-символ (#) для пользователя root. Это работает путем проверки UID пользователя. Если это ноль, пользователь root.Вы найдете определение вашего PS1 переменная окружения в вашем .bashrc файл.Создание переменных среды сеансаЧтобы создать переменные среды для собственного использования, добавьте их в конец .bashrc файл. Если вы хотите, чтобы переменные среды были доступны для удаленных сеансов, таких как SSH-соединения, вам необходимо добавить их в свой .bash_profile файл, а также.Формат определения переменной среды одинаков для обоих файлов. Чтобы добавить определение к вашему .bash_profile файл, введите это в вашем домашнем каталоге:gedit .bashrcМы добавили переменную окружения INHERITED_VAR, Обратите внимание на слово «экспорт» в начале строки.Сохраните и закройте файл после завершения редактирования. Вы можете выйти и снова войти, или вы можете заставить оболочку перечитать .bash_profile файл с помощью команды точка (.) нравится:. .bashrcТеперь давайте создадим переменную окружения в командной строке:LOCAL_VAR="This session only"Если мы используем echoМы видим, что обе переменные окружения доступны для нас:echo $LOCAL_VARecho $INHERITED_VARВы заметите определение INHERITED_VAR переменная окружения имела слово «экспорт» в начале строки. Это означает, что переменная окружения будет наследоваться дочерними процессами текущей оболочки. Если мы запустим еще один, используя bash Команда, мы можем проверить две переменные из дочерней оболочки:bashecho $LOCAL_VARecho $INHERITED_VARКак видите, INHERITED_VAR доступен в дочерней оболочке, но LOCAL_VAR не является. Мы просто получаем пустую строку.Хотя «export» добавляет переменную части среды в среду, которую наследуют дочерние процессы, INHERITED_VAR не является глобальной переменной среды. Например, пользователь mary не могу сослаться на это:echo $INHERITED_VARЗакрыть нашего ребенка bash сеанс мы используем exit:exitУнаследованные среды также влияют на сценарии. Вот простой скрипт, который записывает значения наших трех переменных среды в окно терминала:#!/bin/bash echo "WEBSITE" $WEBSITE echo "LOCAL_VAR" $LOCAL_VAR echo "INHERITED_VAR" $INHERITED_VARЭто было сохранено в файл с именем envtest.sh, а затем сделал исполняемым со следующим:chmod +x envtest.shКогда мы запускаем скрипт, он может получить доступ к двум из трех переменных окружения:./envtest.shСкрипт может видеть WEBSITE глобальная переменная среды и INHERITED_VAR экспортированная переменная окружения. Не может получить доступ LOCAL_VARдаже если скрипт выполняется в той же оболочке, где была создана переменная.Если нам нужно, мы можем экспортировать переменную окружения из командной строки. Мы сделаем это с нашими LOCAL_VARи снова запустите скрипт:export LOCAL_VAR./envtest.shПеременная окружения была добавлена в среду текущей оболочки, и поэтому она появляется в среде, которая наследуется сценарием. Сценарий также может ссылаться на эту переменную среды.Удаленные подключенияГлобальные переменные среды доступны для сеансов удаленного входа, но если вы хотите, чтобы локально определенные переменные среды были доступны вам удаленно, вы должны добавить их в свой .bash_profile файл. Вы можете установить ту же переменную среды в .bashrc а также .bash_profile файлы с разными значениями. Это может быть использовано скриптом, скажем, для изменения его поведения для людей, использующих систему локально или удаленно.(С риском путаницы .profile файл. Он также может содержать определения переменных среды. Однако .profile файл не читается, если .bash_profile файл присутствует. Итак, самое безопасное – и bashсовместимый способ – это использовать .bash_profile файл.)Для редактирования .bash_profile файл, мы будем использовать gedit снова:gedit .bash_profile Мы собираемся добавить ту же переменную среды с тем же значением, которое мы использовали ранее.Сохраните ваши изменения и закройте gedit,На другом компьютере мы сделаем SSH подключение к тестовому компьютеру,ssh dave@howtogeek.localКак только мы подключимся, мы снова запустим скрипт:./envtest.sh .bash_profile файл был прочитан как часть инициализации удаленного входа в систему, и INHERITED_VAR Переменная окружения доступна для нас и самого скрипта.Сброс переменной средыЧтобы сбросить переменную среды, используйте unset команда, Если мы сбросим глобальную переменную среды, WEBSITEи экспортированная переменная среды, INHERITED_VARони больше не будут доступны ни в командной строке, ни в дочерних процессах:unset WEBSITEunset INHERITED_VAR./envtest.shecho $WEBSITEСледует отметить, что это только меняет доступность глобальных переменных среды для вас в этом сеансе. Другой человек, который вошел в систему одновременно, все еще сможет получить доступ к своему экземпляру этой глобальной переменной среды. Его экземпляр был инициализирован и прочитан из /etc/environment файл во время процесса входа в систему, и не зависит от чьей-либо копии переменной.Как пример, пользователь mary все еще может получить доступ к WEBSITE переменная окружения и читать ее значение, даже если пользователь dave имеет unset это в его сессии:echo $WEBSITEЭкологический контрольПеременные среды могут использоваться, чтобы позволить сценариям и приложениям знать, как они должны себя вести. Их можно использовать для хранения настроек или небольших объемов данных. Например, сценарий может заполнять среду значением, на которое могут ссылаться другие сценарии, не записывая их в файл. Программы для Windows, мобильные приложения, игры - ВСЁ БЕСПЛАТНО, в нашем закрытом телеграмм канале - Подписывайтесь:)