Настройка переменных локальной среды
После запуска оболочки bash (или появления сценария оболочки) вам разрешено создавать локальные переменные, которые видны внутри вашего shell-процесса. Вы можете присвоить переменную окружения переменной string или numeric с помощью знака равенства, которому присваивается значение переменной:
$ andreyex_test=testing $ echo $andreyex_test testing $
Поздравляем, вы только что создали свою первую переменную. Просто помните, что в любое время вам нужно ссылаться на значение переменной среды andreyex_test, просто ссылайтесь на нее по имени $ andreyex_test.
Если вам нужно назначить строку значений, содержащих пробелы, вам нужно будет использовать один кавычек, чтобы указать начало и конец строки:
$ andreyex_test=testing a long string -bash: a: command not found $ andreyex_test='testing a long string' $ echo $andreyex_test testing a long string
Если оставить его без одиночных кавычек, оболочка bash предполагает, что следующий символ – это еще одна команда для обработки.
Обратите внимание, что для переменной локального окружения, которую мы определили, мы использовали строчные буквы, переменные системной среды, которые мы видели до сих пор, использовали все прописные буквы. В оболочке bash это стандартное соглашение. Если вы настраиваете новые переменные среды, это не требуется, но рекомендуется использовать строчные буквы. Это помогает дифференцировать ваши личные переменные среды из результатов переменных системной среды
В оболочке bash это стандартное соглашение. Если вы настраиваете новые переменные среды, это не требуется, но рекомендуется использовать строчные буквы. Это помогает дифференцировать ваши личные переменные среды из результатов переменных системной среды.
ПРИМЕЧАНИЕ
Очень важно, чтобы между именем переменной среды, знаком равенства и значением не было пробелов. Если вы помещаете какие-либо пробелы в присваивание, оболочка bash интерпретирует значение как отдельную команду:
$ andreyex_test2 = test -bash: andreyex_test2: command not found $
Установленная локальная переменная среды в вашем процессе оболочки будет доступна для использования в любом месте вашего shell-процесса. Но если вы создаете другую оболочку, она недоступна в дочерней оболочке:
$ bash $ echo $andreyex_test $ exit exit $ echo $andreyex_test testing a long string $
В этом случае мы начали дочернюю оболочку. Как вы можете заметить, переменная среды andreyex_test недоступна в дочерней оболочке (она содержит пустое значение). После того как мы оставили дочернюю оболочку и вернулись к исходной оболочке, переменная локальной среды все еще была доступна.
Аналогично, если вы установите локальную переменную окружения в дочернем процессе после того, как вы покинете дочерний процесс, переменная локальной среды перестает быть доступной:
$ bash $ andreyex_test=testing $ echo $andreyex_test testing $ exit exit $ echo $andreyex_test $
Переменная среды andreyex_test, установленная в дочерней оболочке, не существует, когда мы возвращаемся к родительской оболочке.
Глобальное определение переменных
Для того, чтобы определить эти переменные централизованно, в Calculate существует каталог . В нём находится ряд файлов, например, «00basic», «05gcc» и так далее, в которых определяются переменные, необходимые программам, указанным в названии файлов.
Например, при установке gcc ebuild создает файл /etc/env.d/05gcc, содержащий следующие определения переменных:
PATH="/usr/i686-pc-linux-gnu/gcc-bin/3.2" ROOTPATH="/usr/i686-pc-linux-gnu/gcc-bin/3.2" MANPATH="/usr/share/gcc-data/i686-pc-linux-gnu/3.2/man" INFOPATH="/usr/share/gcc-data/i686-pc-linux-gnu/3.2/info" CC="gcc" CXX="g++" LDPATH="/usr/lib/gcc-lib/i686-pc-linux-gnu/3.2.3"
В других дистрибутивах вам предлагается изменять или добавлять определения переменных среды в или где-нибудь еще
Calculate, с другой стороны, облегчает вам поддержку и управление переменными среды, избавляя от необходимости уделять внимание многочисленным файлам, содержащим определения переменных
Например, когда обновляется gcc, также без малейшего участия пользователя обновляется и /etc/env.d/05gcc.
От этого выигрывает не только Portage, но и вы, пользователь. Иногда от вас может потребоваться глобальная установка какой-нибудь переменной. Возьмем, к примеру, переменную . Вместо того, чтобы возиться с , теперь можно просто создать файл 99local и добавить нужные определения туда:
/etc/env.d/99local
http_proxy="proxy.server.com:8080"
Используя один и тот же файл для всех своих переменных, вы можете быстро увидеть все определенные вами переменные вместе.
Сценарий env-update
Переменная определяется в нескольких файлах в . Нет, нет это не ошибка: при запуске различные определения объединяются перед обновлением переменных среды, позволяя пакетам (или пользователям) добавлять собственные значения переменных, не влияя на уже существующие.
Сценарий объединяет значения переменных из файлов, находящихся в , в алфавитном порядке. Имена файлов должны начинаться с двух десятичных цифр. Порядок обновления, используемый :
00basic 99kde-env 99local +-------------+----------------+-------------+ PATH="/bin:/usr/bin:/usr/kde/3.2/bin:/usr/local/bin"
Объединение выполняется не всегда, а только для следующих переменных: KDEDIRS, PATH, CLASSPATH, LDPATH, MANPATH, INFODIR, INFOPATH, ROOTPATH, CONFIG_PROTECT, CONFIG_PROTECT_MASK, PRELINK_PATH и PRELINK_PATH_MASK. Для всех остальных переменных используется значение, определенное в последнем из файлов (по алфавиту в каталоге ).
При запуске сценария env-update создаются все переменные среды, и помещаются в (используемый файлом ). Кроме того, на основе значения создается . После этого запускается , чтобы вновь создать файла , используемый динамическим компоновщиком.
Если вы хотите, чтобы результаты работы вступили в силу немедленно, для обновления среды выполните следующую команду:
env-update && source /etc/profile
Примечание: Эта команда обновляет переменные только в текущем терминале, в новых консолях и их потомках. То есть, если вы работаете в X11, потребуется или набирать в каждом открываемом терминале, или перезапустить X, чтобы все новые терминалы обращались к новым переменным. Если вы используете диспетчер входа в систему, станьте пользователем с правами root и наберите . Если нет, вам придется выйти и снова войти в систему, чтобы X порождала потомков, использующих новые значения переменных.
Определить переменные
При определении переменной не добавляйте знак доллара ($) к имени переменной, например:
variableName=»value»
Обратите внимание, что между именем переменной и знаком равенства не должно быть пробелов, которые могут отличаться от всех языков программирования, с которыми вы знакомы. При этом именование имен переменных должно соответствовать следующим правилам:
- Первым символом должна быть буква (a-z, A-Z).
- Между ними не должно быть пробелов, вы можете использовать символы подчеркивания (_).
- Вы не можете использовать знаки препинания.
- Вы не можете использовать ключевые слова в bash (вы можете использовать команду help для просмотра зарезервированных ключевых слов).
Примеры определений переменных:
myUrl=http://www.makeru.com.cn
myNum=100
Как работают окружение и переменные окружения
Каждый раз при запуске сеанса оболочки запускается процесс сбора и компиляции информации, которая должна быть доступной процессу оболочки и его дочерним процессам. Он получает данные для этих настроек из самых разнообразных файлов и настроек в системе.
Окружение предоставляет среду, через которую процесс оболочки может получать или задавать настройки и, в свою очередь, передавать эти настройки его дочерним процессам.
Окружение реализуется в виде строк, которые содержат пары ключ-значение. Если передается несколько значений, они обычно разделяются двоеточием (). Каждая пара, как правило, выглядит следующим образом:
Если значение содержит значительное количество пробелов, используются кавычки:
Ключи в этих случаях являются переменными. Они могут относиться к одному из двух типов: переменные окружения или переменные оболочки.
Переменные окружения — это переменные, определяемые для текущей оболочки и наследуемые любыми дочерними оболочками или процессами. Переменные окружения используются для передачи информации процессам, которые запущены в оболочке.
Переменные оболочки — это переменные, содержащиеся исключительно в оболочке, внутри которой они были заданы или определены. Часто они используются для отслеживания кратковременных данных, например текущего рабочего каталога.
Согласно конвенции эти типы переменных обычно определяются с помощью заглавных букв. Это помогает пользователям различать переменные окружения внутри других контекстов.
Среды и Наследование
Когда оболочка запускается, она проходит фазу инициализации. Именно в этот момент он считывает переменные окружения, которые определяют среду оболочки.
Когда программа или команда запускается из этой оболочки, известной как дочерний процесс, она наследует среду родительского процесса, но будьте осторожны! Как мы увидим, вы можете создавать переменные, которые не добавляются в вашу среду, поэтому они не будут наследоваться дочерним процессом.
Если дочерний процесс является оболочкой, эта оболочка будет инициализироваться из своего собственного свежего набора переменных. Таким образом, если вы измените командную строку в текущей оболочке, а затем запустите дочернюю оболочку, дочерняя оболочка не унаследует измененную командную строку родителя.
Переменные среды системы позиционирования
Когда вы входите в систему Linux для запуска оболочки bash, по умолчанию bash будет искать команды в нескольких файлах. Эти файлы называютсяили. Проверка bash файла запуска зависит от того, как вы запустили оболочку bash. Запустить оболочку bash можно тремя способами:
- В качестве оболочки входа по умолчанию при входе в систему
- Интерактивная оболочка как оболочка без входа
- В качестве неинтерактивной оболочки для запуска скриптов
Оболочка входа
Оболочка входа в систему начнется сПрочтите команды в разных файлах запуска:
Этот файл является основным файлом запуска оболочки bash по умолчанию в системе. Каждый пользователь в системе будет запускать этот файл запуска при входе в систему.
Следует отметить, что некоторые дистрибутивы Linux используют. В этом случае файлы PAM будут обрабатываться до запуска оболочки bash, и эти файлы могут содержать переменные среды. Файлы PAM включаютФайлы ифайл.
Остальные 4 файла запуска предназначены для конкретного пользователя и могут быть настроены в соответствии с личными потребностями.
1./etc/profile файл
Это основной файл запуска оболочки bash по умолчанию. Пока вы входите в систему Linux, bash будет выполнятьЗапустите команду в файле. Различные дистрибутивы Linux помещают в этот файл разные команды.
В файле / etc / profile выпуска Ubuntu и CentOS используется одна и та же функция: оператор for. Он используется для итерацииВсе файлы в каталоге. Это дает системе Linux место для размещения определенных файлов запуска приложений.Когда пользователь входит в систему, оболочка выполняет эти файлы.
Переменные средЫ
Давайте поговорим о переменных среды. Данные переменные, заданы в и инициализируются при загрузке, либо при выполнении команды «. .файл_инициализации». Обычно, основные значения переменных среды следующие:
$BASH
В переменной $BASH содержится полный путь до исполняемого файла командной оболочки Bash.
$BASH_VERSION
В переменную $BASH_VERSION записывается версия Bash.
$CDPATH
Переменная, которая хранит пути поиска каталога. (используется при вводе команды cd имя_каталога без слэша)
$CLASSPATH
содержит список каталогов для поиска файлов классов Java и архивов Java.
$HOME
домашний каталог текущего пользователя.
$HOSTNAME
В переменной $HOSTNAME хранится имя компьютера.
$HISTSIZE
количество событий, хранимых в истории за 1 сеанс
$HISTFILE
Расположение файла истории событий
$HISTFILESIZE
количество событий, хранимых в истории между сеансами
$IFS
переменная хранит символы, являющиеся разделителями команд и параметров. (по умолчанию — пробел, табуляция и новая строка)
$LANG
текущая установка локализации, которая позволяет настроить командную оболочку для использования в различных странах и на различных языках.
Место, где храниться почта
$OSTYPE
В переменной $OSTYPE содержится описание операционной системы.
$PATH
список каталогов для поиска команд и приложений, когда полный путь к файлу не задан.
$PS1
PS1 используется как основная строка приглашения. (то самое #)
$PS2
PS2 используется как вторичная строка приглашения.
$PROMPT_COMMAND
Эта команда должна быть выполнена до отображения строки приглашения Bash.
$PWD
полный путь к текущему рабочему каталогу.
$SHELL
полный путь к текущей командной оболочке.
$USER
В переменной $USER содержится имя текущего пользователя.
Переменные среды Shell по умолчанию
Существуют конкретные переменные среды, которые bash shell использует для определения системной среды. Вы всегда можете подсчитать эти переменные, которые будут использоваться в вашей системе Linux. Поскольку оболочка bash является производной исходной оболочки Unix Bourne, она также включает переменные среды, первоначально определенные в этой оболочке.
Следующие примеры показывают, что переменные среды, предоставляемые оболочкой bash, совместимы с исходной оболочкой Unix Bourne.
До сих пор наиболее ценной переменной среды в этом списке является переменная среды PATH.
Когда вы вводите команду в командной оболочке оболочки (интерфейс командной строки), оболочка должна искать систему, чтобы найти программу. Каталоги, которые он ищет в поисках команд, определяются переменной среды PATH. В системе Linux переменная среды PATH должна выглядеть примерно так:
$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
$
В этом случае показано, что существует восемь каталогов, в которых оболочка ищет команды. Каждый каталог разделяется двоеточием, и в конце переменной PATH нет и конца списка каталогов. Вы всегда можете добавить дополнительные каталоги в PATH, добавив новый каталог и добавив еще один двоеточие. PATH также демонстрирует запрос, в котором он ищет заказы.
В дополнение к стандартным переменным среды Bourne, оболочка bash также предоставляет несколько переменных, как показано:
Глобальные переменные среды
По соглашению переменным среды присваиваются имена в верхнем регистре. Вот некоторые из глобальных переменных среды, и что представляют собой значения, которые они содержат:
- РАКУШКА: Имя оболочки, которая запускается при открытии окна терминала. В большинстве дистрибутивов Linux это будет баш если вы не изменили его по умолчанию.
- СРОК: Окна терминала на самом деле эмулируют аппаратный терминал. Это содержит тип аппаратного терминала, который будет эмулироваться.
- USER: Имя пользователя текущего человека, использующего систему.
- PWD: Путь к текущему рабочему каталогу.
- OLDPWD: Каталог, в котором вы находились до перехода в текущий рабочий каталог.
- LS_COLORS: Список цветовых кодов, используемых выделить разные типы файлов,
- MAIL: Если На вашем компьютере Linux установлена система (по умолчанию это не так), она будет содержать путь к почтовому ящику текущего пользователя,
- ДОРОЖКА: Список каталогов, по которым оболочка будет искать исполняемые файлы команд.
- LANG: Настройки языка, локализации и кодировки символов.
- ДОМ: Домашний каталог текущего пользователя.
- _: Подчеркивание () переменная окружения содержит последнюю введенную команду.
СВЯЗАННЫЕ С: Как использовать pushd и popd в Linux
Мы можем видеть, что некоторые из них настроены на использование ничего более сложного, чем , который будет записать значения в окно терминала, Чтобы увидеть ценность удерживается переменной среды, вам нужно добавить знак доллара () к началу своего названия.
Приятно, что вы можете использовать завершение вкладки заполнить имя переменной среды для вас. Введите несколько букв имени и нажмите Tab. Имя переменной заполняется оболочкой. Если этого не произойдет, вам нужно будет набрать еще несколько букв, чтобы отличить переменную среды от других команд, имена которых начинаются с тех же букв:
echo $SHELL
echo $LANG
echo $HOME
echo $PWD
Чтобы создать свой собственный Глобальный переменные среды, добавьте их в файл. Вам нужно использовать редактировать этот файл:
sudo gedit /etc/environment
Чтобы добавить переменную среды, введите ее имя, знак равенства () и значение, которое вы хотите сохранить в переменной среды. Не ставьте пробел до или после знака равенства (). Имя переменной окружения может содержать буквы, подчеркивание () или цифры. Однако первый символ имени не может быть числом.
Если в значении есть пробелы, убедитесь, что вы заключили все значение в кавычки ().
Сохраните файл, а затем выйдите и снова войдите в систему. использование чтобы проверить, что новая переменная существует и содержит значение, которое вы установили:
echo $WEBSITE
Потому что это глобальная переменная среды, доступная каждому может ссылаться на переменную окружения при следующем входе в систему:
echo $WEBSITE
к увидеть все переменные среды сразу наберите , Выводов много, поэтому есть смысл передать его через , а затем в :
printenv | sort | less
Сортированный список переменных среды отображается для нас в ,
Мы можем передать вывод через искать переменные среды связанные с конкретной темой,
printenv | grep GNOME
СВЯЗАННЫЕ С: Как редактировать текстовые файлы графически в Linux с помощью gedit
Добавление пользовательских и системных переменных окружения в Linux
Теперь, когда вы знаете немного теории, перейдем к практике. Локальные переменные окружения в Linux можно создавать следующими командами:
var=значение $ export var=значение
Эти переменные будут доступны только для текущей терминальной сессии.
Для удаления переменных окружения можно использовать несколько команд:
1. Использование env
По умолчанию с помощью env можно посмотреть все установленные переменные среды. Но с опцией -i она позволяет временно удалить все переменные оболочки и выполнить команду без переменных.
env –i команда
Var – это любая переменная, которую вы хотите передать этой команде.
Такая команда запустит оболочку вообще без переменных окружения:
После запуска такого окружения, не будет доступно никаких переменных, но после выхода все вернется на свои места.
3. Установить значение переменной в ”
Это самый простой способ удаления переменных окружения в Linux, устанавливая пустое значение переменной, вы удаляете ее до конца текущей сессии.
Замечание: С помощью таких способов вы можете изменять значения системных или пользовательских переменных, но они будут актуальны только для текущего сеанса.
Переменные пользователя
Присвоение значения переменной
Пользовательские переменные появляются, как только пользователь «объявит» данную переменную, то есть присвоит переменной какое-то значение:
$ var=»123 345″ # Присваивание значения переменной
# Если в значениях переменных встречаются пробелы,
# то использование кавычек обязательно, иначе — можно без кавычек.
$ variable=$var # Подстановка значения переменной
#————————————————————————-
# Использование пробельных символов
# с обеих сторон символа «=» присваивания недопустимо.
# Если записать «VARIABLE =value»,
# то интерпретатор попытается выполнить команду «VARIABLE» с параметром «=value».
# Если записать «VARIABLE= value»,
# то интерпретатор попытается установить переменную окружения «VARIABLE» в «»
# и выполнить команду «value».
#————————————————————————-
$ echo var # Это НЕ вывод переменной
var
$ echo $var
123 345
$ echo $variable
123 345
$ echo «$variable»
123 345
# Как видно, использование кавычек при выводе значения переменной сохраняет
# пробельные символы в переменной
$ echo ‘$variable’
$variable
$ echo \$variable
$variable
# Внутри одинарных кавычек не производится подстановка значений переменных,
# т.е. «$» интерпретируется как простой символ
А так же при использовании
# символа экранирования.
$ variable= # Запись пустого значения в переменную(!но не удаление)
$ echo $variable
# Обратите внимание: запись пустого значения — это не то же самое,
# что сброс переменной, хотя конечный результат — тот же (см. ниже).
$ echo «uninitialized_variable = $uninitialized_variable»
uninitialized_variable = #пустое
# Неинициализированная переменная содержит «пустое» значение.
$ unset uninitialized_variable # Сброс переменной.
$ echo «uninitialized_variable = $uninitialized_variable»
uninitialized_variable = #пустое
Действия над переменными
Как уже указывалось, переменной можно присвоить значение. Кроме данного действия, возможно производить следующие действия:
$ readonly variable # пометка переменной "только для чтения" $ variable=789 -bash: variable: доступная только на чтение переменная $ cat test #содержимое первого скрипта #! /bin/bash variable1=znachenie #объявление переменной echo "test 1: $variable1" #вывод переменной ./subtest #запуск вложенного скрипта echo "test 2: $variable1" #вывод переменной после запуска вложенного скрипта export variable1 #экспорт переменной echo "test 3: $variable1" ./subtest echo "test 4: $variable1" $ cat subtest #содержимое скрипта, запускаемого из первого #! /bin/bash echo "subtest 1: $variable1" variable1=drugoe echo "subtest 2: $variable1" $ ./test #запуск скрипта test 1: znachenie subtest 1: subtest 2: drugoe test 2: znachenie test 3: znachenie subtest 1: znachenie subtest 2: drugoe test 4: znachenie $ cat where where=$(pwd) echo "Вы работаете в каталоге 1: $where" echo "Вы работаете в каталоге 2: $(pwd)" where2=`pwd` echo "Вы работаете в каталоге 3: $where2" # Как видно, переменной можно присвоить значение вывода какой-либо команды # используя комбинацию $(command) или `command` (апострофы). $ ./where Вы работаете в каталоге 1: /home/user Вы работаете в каталоге 2: /home/user Вы работаете в каталоге 3: /home/user
Использование переменных
Переменные часто используются в вывод строк. Чтобы указать переменную в строке укажите ее внутри двойных кавычек.
show_name.sh
ZSH
#!/bin/bash
my_name=»Oleg»
echo «My name is $my_name»
1 |
#!/bin/bash my_name=»Oleg» echo»My name is $my_name» |
Если использовать одинарные кавычки, то ссылка на переменную будет отображена как обычный текст.
show_name.sh
ZSH
#!/bin/bash
my_name=»Oleg»
echo ‘My name is $my_name’
1 |
#!/bin/bash my_name=»Oleg» echo’My name is $my_name’ |
В переменных можно сохранять результат выполнения какой либо команды, для этого поместите команду в обратные ковычки или в круглые скобки со знаком вначале.
cmd_output.sh
ZSH
#!/bin/bash
folders_amount=`ls -l | grep ^d | wc -l`
echo «Folders: ${folders_amount}»
local_ip=$(hostname -i | grep -E -o «({1,3}){3}{1,3}»)
echo «IP address: ${local_ip}»
1 |
#!/bin/bash folders_amount=`ls-l|grep^d|wc-l` echo»Folders: ${folders_amount}» local_ip=$(hostname-i|grep-E-o»({1,3}){3}{1,3}») echo»IP address: ${local_ip}» |
Также переменным можно присвоить значение содержимого какого-либо файла:
#!/bin/bash
file_content=$(<somefile)
echo $file_content
1 |
#!/bin/bash file_content=$(<somefile) echo$file_content |
Иногда случаются ситуации когда текст нужно подставить вплотную к значению переменной.
Например, в данной ситуации мы хотим слить воедино значение переменной и следующее за ней слово — «rock».
var_merge.sh
ZSH
#!/bin/bash
prefix=»Hard»
echo «$prefixrock cafe.»
1 |
#!/bin/bash prefix=»Hard» echo»$prefixrock cafe.» |
В результате мы получим только часть вывода т.к. интерпретатор будет пытаться найти переменную $prefixrock, которой у нас нет.
Чтобы получить желаемое слияние текста и значения переменной воспользуемся следующим синтаксисом. Установим имя переменной внутри фигурных скобок — с предваряющим знаком —
var_merge.sh
ZSH
#!/bin/bash
prefix=»Hard»
echo «${prefix}rock cafe.»
1 |
#!/bin/bash prefix=»Hard» echo»${prefix}rock cafe.» |
Постоянные переменные среды
Для создания постоянных переменных окружения, нужно определить эти переменные в файлах конфигурации bash. В большинстве дистрибутивов Linux при запуске нового сеанса переменные среды считываются из следующих файлов:
- /etc/environment — Используйте этот файл для настройки общих системных переменных. Переменные в этом файле устанавливаются в следующем формате
- /etc/profile — Переменные, заданные в этом файле, загружаются при каждом входе в оболочку bash. Чтобы объявить переменные окружения в этом файле вам нужно использовать команду экспорта:
- Конфигурационные файлы для отдельных пользовательских оболочек. Например, если вы используете Bash, вы можете объявить переменные в
Чтобы загрузить новые переменные среды в текущий сеанс оболочки, используйте команду source:
В этом руководстве мы показали, как устанавливать и перечислять переменные окружения и оболочки.
Переменными окружения в операционных системах на базе ядра Linux называются те переменные, которые содержат текстовую информацию, используемую другими программами во время запуска. Обычно они включают общие системные параметры как графической, так и командной оболочки, данные о настройках пользователя, расположении определенных файлов и многое другое. Значения таких переменных указываются, например, цифрами, символами, путями к директориям или файлам. Благодаря этому множество приложений быстро получают доступ к определенным настройкам, а также появляется возможность для пользователя изменять или создавать новые опции.