Что такое переменные среды bash

Переменные со значением по умолчанию

Не объявленные переменные могут принимать значения по умолчанию.

Если переменная не объявлена, то с помощью оператора —  мы можем задать ей начальное значение.

Рассмотрим пример установки значения по умолчанию.

var_default.sh

ZSH

#!/bin/bash
# Объявляем переменную $planet и присваиваем ей значение
planet=»Earth»
# Сбрасываем значение переменной $planet
unset planet
echo «\$planet:= ${planet:=Mars}»
echo «\$planet:= ${planet:=Venus}»
echo «\$planet: ${planet}»
planet=»Jupiter»
echo «\$planet: ${planet}»

1
2
3
4
5
6
7
8
9
10

#!/bin/bash
# Объявляем переменную $planet и присваиваем ей значение

planet=»Earth»

# Сбрасываем значение переменной $planet

unset planet

echo»\$planet:= ${planet:=Mars}»

echo»\$planet:= ${planet:=Venus}»

echo»\$planet: ${planet}»

planet=»Jupiter»

echo»\$planet: ${planet}»

Значение по умолчанию можно задать только один раз.

Посмотреть содержимое всех переменных окружения

Чтобы изучить не только PATH а вообще все переменные окружения, выполните

env

LC_PAPER=en_US.UTF-8
XDG_SESSION_ID=2
LC_ADDRESS=en_US.UTF-8
HOSTNAME=localhost.localdomain
LC_MONETARY=en_US.UTF-8
SELINUX_ROLE_REQUESTED=
TERM=xterm-256color
SHELL=/bin/bash
HISTSIZE=1000
SSH_CLIENT=192.168.56.1 41522 22
SELINUX_USE_CURRENT_RANGE=
LC_NUMERIC=en_US.UTF-8
SSH_TTY=/dev/pts/1
USER=andrei
LS_COLORS=rs=0:di=38;5;27:ln=38;5;51:mh=44;38;5;15:pi=40;38;5;11:so=38;5;13:do=38;5;5:bd=48;5;232;38;5;11:cd=48;5;232;38;5;3:or=48;5;232;38;5;9:mi=05;48;5;232;38;5;15:su=48;5;196;38;5;15:sg=48;5;11;38;5;16:ca=48;5;196;38;5;226:tw=48;5;10;38;5;16:ow=48;5;10;38;5;21:st=48;5;21;38;5;15:ex=38;5;34:*.tar=38;5;9:*.tgz=38;5;9:*.arc=38;5;9:*.arj=38;5;9:*.taz=38;5;9:*.lha=38;5;9:*.lz4=38;5;9:*.lzh=38;5;9:*.lzma=38;5;9:*.tlz=38;5;9:*.txz=38;5;9:*.tzo=38;5;9:*.t7z=38;5;9:*.zip=38;5;9:*.z=38;5;9:*.Z=38;5;9:*.dz=38;5;9:*.gz=38;5;9:*.lrz=38;5;9:*.lz=38;5;9:*.lzo=38;5;9:*.xz=38;5;9:*.bz2=38;5;9:*.bz=38;5;9:*.tbz=38;5;9:*.tbz2=38;5;9:*.tz=38;5;9:*.deb=38;5;9:*.rpm=38;5;9:*.jar=38;5;9:*.war=38;5;9:*.ear=38;5;9:*.sar=38;5;9:*.rar=38;5;9:*.alz=38;5;9:*.ace=38;5;9:*.zoo=38;5;9:*.cpio=38;5;9:*.7z=38;5;9:*.rz=38;5;9:*.cab=38;5;9:*.jpg=38;5;13:*.jpeg=38;5;13:*.gif=38;5;13:*.bmp=38;5;13:*.pbm=38;5;13:*.pgm=38;5;13:*.ppm=38;5;13:*.tga=38;5;13:*.xbm=38;5;13:*.xpm=38;5;13:*.tif=38;5;13:*.tiff=38;5;13:*.png=38;5;13:*.svg=38;5;13:*.svgz=38;5;13:*.mng=38;5;13:*.pcx=38;5;13:*.mov=38;5;13:*.mpg=38;5;13:*.mpeg=38;5;13:*.m2v=38;5;13:*.mkv=38;5;13:*.webm=38;5;13:*.ogm=38;5;13:*.mp4=38;5;13:*.m4v=38;5;13:*.mp4v=38;5;13:*.vob=38;5;13:*.qt=38;5;13:*.nuv=38;5;13:*.wmv=38;5;13:*.asf=38;5;13:*.rm=38;5;13:*.rmvb=38;5;13:*.flc=38;5;13:*.avi=38;5;13:*.fli=38;5;13:*.flv=38;5;13:*.gl=38;5;13:*.dl=38;5;13:*.xcf=38;5;13:*.xwd=38;5;13:*.yuv=38;5;13:*.cgm=38;5;13:*.emf=38;5;13:*.axv=38;5;13:*.anx=38;5;13:*.ogv=38;5;13:*.ogx=38;5;13:*.aac=38;5;45:*.au=38;5;45:*.flac=38;5;45:*.mid=38;5;45:*.midi=38;5;45:*.mka=38;5;45:*.mp3=38;5;45:*.mpc=38;5;45:*.ogg=38;5;45:*.ra=38;5;45:*.wav=38;5;45:*.axa=38;5;45:*.oga=38;5;45:*.spx=38;5;45:*.xspf=38;5;45:
LC_TELEPHONE=en_US.UTF-8
MAIL=/var/spool/mail/andrei
PATH=/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/andrei/.local/bin:/home/andrei/bin
LC_IDENTIFICATION=en_US.UTF-8
PWD=/home/andrei
LANG=en_US.UTF-8
LC_MEASUREMENT=en_US.UTF-8
SELINUX_LEVEL_REQUESTED=
HISTCONTROL=ignoredups
SHLVL=1
HOME=/home/andrei
LOGNAME=andrei
XDG_DATA_DIRS=/home/andrei/.local/share/flatpak/exports/share:/var/lib/flatpak/exports/share:/usr/local/share:/usr/share
SSH_CONNECTION=192.168.56.1 41522 192.168.56.116 22
LESSOPEN=||/usr/bin/lesspipe.sh %s
XDG_RUNTIME_DIR=/run/user/1000
LC_TIME=en_US.UTF-8
LC_NAME=en_US.UTF-8
_=/usr/bin/env

Установка и удаление пользовательских переменных

Отредактируйте файл .bashrc, в вашей домашней директории, добавив команду export, для экспортирования нужной переменной. Затем выполните команду source для применения изменений. Создадим, например, переменную CD:

Добавьте такую строчку (o, затем вставить, затем Esc и :wq):

export CD=’This is Losst Home’

Теперь осталось обновить конфигурацию:

source .bashrc $ echo $CD

Для удаления этой переменной просто удалите ее из .bashrc.

Теперь добавим переменную окружения с помощью .bash_profile. Эта переменная, как вы уже знаете будет доступна только при удаленном входе:

export VAR2=’This is Losst Home’

И выполните эти команды, чтобы применить изменения и проверить добавление переменной:

source .bash_profile $ echo $VAR2

Переменная недоступна, так как вы создали локальную терминальную сессию, теперь подключитесь по ssh:

ssh user@localhost $ echo $VAR2

Удалить эту переменную окружения можно так же как и в предыдущем случае, удалив ее из файла.

Замечание: Эти переменные доступны всегда, но не для всех пользователей.

Настройка переменных локальной среды

После запус­ка обо­лоч­ки bash (или появ­ле­ния сце­на­рия обо­лоч­ки) вам раз­ре­ше­но созда­вать локаль­ные пере­мен­ные, кото­рые вид­ны внут­ри ваше­го shell-про­цес­са. Вы може­те при­сво­ить пере­мен­ную окру­же­ния пере­мен­ной string или numeric с помо­щью зна­ка равен­ства, кото­ро­му при­сва­и­ва­ет­ся зна­че­ние переменной:

YAML

$ andreyex_test=testing
$ echo $andreyex_test
testing
$

1
2
3
4

$andreyex_test=testing

$echo$andreyex_test
testing
$

Поздрав­ля­ем, вы толь­ко что созда­ли свою первую пере­мен­ную. Про­сто помни­те, что в любое вре­мя вам нуж­но ссы­лать­ся на зна­че­ние пере­мен­ной сре­ды andreyex_test, про­сто ссы­лай­тесь на нее по име­ни $ andreyex_test.

Если вам нуж­но назна­чить стро­ку зна­че­ний, содер­жа­щих про­бе­лы, вам нуж­но будет исполь­зо­вать один кавы­чек, что­бы ука­зать нача­ло и конец строки:

YAML

$ andreyex_test=testing a long string
-bash: a: command not found
$ andreyex_test=’testing a long string’
$ echo $andreyex_test
testing a long string

1
2
3
4
5

$andreyex_test=testingalongstring

-bash: a: command not found

$andreyex_test=’testing a long string’

$echo$andreyex_test
testingalongstring

Если оста­вить его без оди­ноч­ных кавы­чек, обо­лоч­ка bash пред­по­ла­га­ет, что сле­ду­ю­щий сим­вол – это еще одна коман­да для обработки.

Обра­ти­те вни­ма­ние, что для пере­мен­ной локаль­но­го окру­же­ния, кото­рую мы опре­де­ли­ли, мы исполь­зо­ва­ли строч­ные бук­вы,  пере­мен­ные систем­ной сре­ды, кото­рые мы виде­ли до сих пор, исполь­зо­ва­ли все про­пис­ные буквы.

В обо­лоч­ке bash это стан­дарт­ное согла­ше­ние. Если вы настра­и­ва­е­те новые пере­мен­ные сре­ды, это не тре­бу­ет­ся, но реко­мен­ду­ет­ся исполь­зо­вать строч­ные бук­вы. Это помо­га­ет диф­фе­рен­ци­ро­вать ваши лич­ные пере­мен­ные сре­ды из резуль­та­тов пере­мен­ных систем­ной среды.

ПРИМЕЧАНИЕ. Очень важ­но, что­бы меж­ду име­нем пере­мен­ной сре­ды, зна­ком равен­ства и зна­че­ни­ем не было про­бе­лов. Если вы поме­ща­е­те какие-либо про­бе­лы в при­сва­и­ва­ние, обо­лоч­ка bash интер­пре­ти­ру­ет зна­че­ние как отдель­ную команду:

YAML

$ andreyex_test2 = test
-bash: andreyex_test2: command not found
$

1
2
3

$andreyex_test2=test

-bash: andreyex_test2: command not found

$

Уста­нов­лен­ная локаль­ная пере­мен­ная сре­ды в вашем про­цес­се обо­лоч­ки будет доступ­на для исполь­зо­ва­ния в любом месте ваше­го shell-про­цес­са. Но если вы созда­е­те дру­гую обо­лоч­ку, она недо­ступ­на в дочер­ней оболочке:

YAML

$ bash
$ echo $andreyex_test
$ exit
exit
$ echo $andreyex_test
testing a long string
$

1
2
3
4
5
6
7

$bash

$echo$andreyex_test

$exit
exit

$echo$andreyex_test
testingalongstring
$

В этом слу­чае мы нача­ли дочер­нюю обо­лоч­ку. Как вы може­те заме­тить, пере­мен­ная сре­ды andreyex_test недо­ступ­на в дочер­ней обо­лоч­ке (она содер­жит пустое зна­че­ние). После того как мы оста­ви­ли дочер­нюю обо­лоч­ку и вер­ну­лись к исход­ной обо­лоч­ке, пере­мен­ная локаль­ной сре­ды все еще была доступна.

Ана­ло­гич­но, если вы уста­но­ви­те локаль­ную пере­мен­ную окру­же­ния в дочер­нем про­цес­се после того, как вы поки­не­те дочер­ний про­цесс, пере­мен­ная локаль­ной сре­ды пере­ста­ет быть доступной:

YAML

$ bash
$ andreyex_test=testing
$ echo $andreyex_test
testing
$ exit
exit
$ echo $andreyex_test
$

1
2
3
4
5
6
7
8

$bash

$andreyex_test=testing

$echo$andreyex_test
testing

$exit
exit

$echo$andreyex_test
$

Пере­мен­ная сре­ды andreyex_test, уста­нов­лен­ная в дочер­ней обо­лоч­ке, не суще­ству­ет, когда мы воз­вра­ща­ем­ся к роди­тель­ской оболочке.

Все переменные в одном месте

Если вы разрабатываете несколько проектов Node.js на одном компьютере, возможно столкнуться с тем, что у вас есть перекрывающиеся имена переменных окружения. Например для разных приложений могут понадобиться разные ключи MYAPIKEY. Хороший способ исправить это, использовать файл .env, для конфигурации конкретного проекта. Эти файлы позволяют указать различные переменные окружения и их значения.

Просто создайте файл .env в корневом каталоге проекта и добавьте в него все необходимые переменные. В нашем случае:


https://gist.github.com/Hydrock/01a81f9ea8d6689cb377f23ea28ce816

Не забудьте добавить этот файл в свой .gitignore, ведь мы не хотим раздавать всем наши ключи. В некоторых репозиториях возможно встретить файлы с именами .env.example — это всего лишь шаблон/схема для ваших значений, просто скопируйте все в .env и подставьте свои значения

Важно понимать, что такие названия это всего лишь общая договоренность и ничего больше. Некоторые редакторы даже подставляют иконки для таких файлов:


Иконки у файлов .env

Далее, необходимо прочитать переменные и добавить их в переменные окружения. Самый распространенный способ — использовать модуль npm, под названием dotenv. Просто установите модуль через npm:

npm install dotenv --save

Затем добавьте следующую строку в самое начало вашего файла (первой точки входа в приложение):

require(‘dotenv’).load();

Пакет dotenv автоматически загрузит файл .env из корневого каталога проекта, и инициализирует значения. Подробнее читайте в документации к пакету

Важной особенностью этого модуля является то что он не перезаписывает уже существующие переменные окружения (хотя и есть способ это сделать) и пропускает их. Есть и другие решения, например env2 и node-env-file

Так же важно понимать, что использовать такой подход можно только при разработке и никак не в продакшене. Дело в том что файл .env доступен для чтения и если злоумышленник получит доступ к серверу, он может найти этот файл просто по имени

Само сохранение секретных значений в открытый файл противоречит безопасности.

Notes and exceptions

startx from terminal

If you start X Window (the GUI) from a text console, your environment variables are already defined by your login shell, as explained above. However, the window manager may read the same files again (see below). This is usually not a problem, but you may get unexpected results, such as PATH having all entries listed twice.

Shell cascading

If you start another shell within the login shell (yes it is possible), the second one is a non-login shell. It will not read named start-up files but searches non-login start-up script from user’s home directory instead. With Bash it is called ~/.bashrc. To avoid specifying same values in two places usually the login-shell start-up script ~/.bash_profile includes the ~/.bashrc at the end of its execution. To implement include following into your ~/.bash_profile:

if [ -f ~/.bashrc ]; then
   . ~/.bashrc;
fi

Terminal windows in X

If you start terminal / console window in graphical desktop environment it will be non-login terminal and it will read only the user’s non-login start-up script. For Bash this is ~/.bashrc.

Using su

The su command is used to become another user during a login session. It is commonly used to get root permissions temporarily from normal session. In Stretch and earlier releases, the su command resets your PATH environment value to one defined in /etc/login.defs by ENV_PATH and ENV_SUPATH variables. In Buster, su does not change your PATH variable.

Please note that using Gnome helper gksu from Gnome panel by default uses su internally (i.e. you may «lose» your PATH if you do not configure it in login.defs in stretch).

Does this mean gksu simply fails outright in buster due to the missing /sbin et al. in PATH?

Установка переменных среды

Чтобы лучше проиллюстрировать разницу между переменными оболочки и среды, мы начнем с установки переменных оболочки, а затем перейдем к переменным среды.

Чтобы создать новую переменную оболочки с именем и значением просто введите:

Вы можете проверить, что переменная установлена, используя либо либо фильтруя вывод команды set с помощью grep :

Используйте команду чтобы проверить, является ли эта переменная переменной среды или нет:

Вывод будет пустым, что говорит нам, что переменная не является переменной среды.

Вы также можете попробовать напечатать переменную во вспомогательной оболочке, и вы получите пустой результат.

Команда используется для установки переменных среды.

Чтобы создать переменную среды, просто экспортируйте переменную оболочки как переменную среды:

Вы можете проверить это, запустив:

Если вы попытаетесь напечатать переменную во вспомогательной оболочке, на этот раз вы получите имя переменной, напечатанное на вашем терминале:

Вы также можете установить переменные среды в одной строке:

Созданные таким образом переменные среды доступны только в текущем сеансе. Если вы откроете новую оболочку или выйдете из системы, все переменные будут потеряны.

Категории пользователей по отношению к файлу

GNU/Linux как любая Unix-подобная операционная система является многопользовательской. Это значит, что в системе могут работать одновременно или по-очереди несколько или множество пользователей. У каждого из них должно быть собственное файловое пространство, доступ к которому других пользователей ограничен.

Отсюда вытекает, что у любого файла в Linux должны быть специальные атрибуты – права на доступ. Эти атрибуты должны сообщать, кто имеет право работать с файлом.

Выделяют три категории пользователей, которым могут предоставляться права на файл:

  • Сам владелец (u – user) объекта – конкретный пользователь, чье имя числится в атрибутах файла как имя владельца этого файла. Обычно если пользователь создает файл, то он автоматически записывается как его владелец.

  • Группа (g – group), к которой принадлежит владелец файла. Когда в Linux создается пользователь, то для него создается одноименная группа. Однако средствами администрирования системы можно объединять пользователей в различные группы. При этом конкретный пользователь может входить в состав нескольких групп. Группы позволяют предоставлять права доступа к ресурсам сразу нескольким людям, но при этом ограниченному кругу лиц.

  • Все остальные (o – other) – это все те, кто не является владельцем файла и не принадлежит к группе владельца файла. То есть любой посторонний пользователь.

Права на файл могут изменять только владелец этого файла и суперпользователь.

Переменные средЫ

Давайте поговорим о переменных среды. Данные переменные, заданы в и инициализируются при загрузке, либо при выполнении команды «. .файл_инициализации». Обычно, основные значения переменных среды следующие:

$BASH

В переменной $BASH содержится полный путь до исполняемого файла командной оболочки Bash.

$BASH_VERSION

В переменную $BASH_VERSION записывается версия Bash.

$CDPATH

Переменная, которая хранит пути поиска каталога. (используется при вводе команды cd имя_каталога без слэша)

$CLASSPATH

содержит список каталогов для поиска файлов классов Java и архивов Java.

$HOME

домашний каталог текущего пользователя.

$HOSTNAME

В переменной $HOSTNAME хранится имя компьютера.

$HISTSIZE

количество событий, хранимых в истории за 1 сеанс

$HISTFILE

Расположение файла истории событий

$HISTFILESIZE

количество событий, хранимых в истории между сеансами

$IFS

переменная хранит символы, являющиеся разделителями команд и параметров. (по умолчанию — пробел, табуляция и новая строка)

$LANG

текущая установка локализации, которая позволяет настроить командную оболочку для использования в различных странах и на различных языках.

$MAIL

Место, где храниться почта

$OSTYPE

В переменной $OSTYPE содержится описание операционной системы.

$PATH

список каталогов для поиска команд и приложений, когда полный путь к файлу не задан.

$PS1

PS1 используется как основная строка приглашения. (то самое #)

$PS2

PS2 используется как вторичная строка приглашения.

$PROMPT_COMMAND

Эта команда должна быть выполнена до отображения строки приглашения Bash.

$PWD

полный путь к текущему рабочему каталогу.

$SHELL

полный путь к текущей командной оболочке.

$USER

В переменной $USER содержится имя текущего пользователя.

Особые переменные (Позиционные переменные)

При вызове команды или сценария с аргументами, имя команды и ее аргументы являются позиционными переменными. Позиционными они называются, потому что внутри сценария  обращение к ним происходит по позиции в командной строке. Давайте рассмотрим их на практике:

# Рассмотрим содержимое командного сценария
$ cat display_arg
#! /bin/bash
echo "Имя запущенного сценария: $0"
echo "Первые пять аргументов командной строки: $1 $2 $3 $4 $5"
echo "Всего аргументов сценария: $#"
echo "Все аргументы у запущенного сценария: $*"
echo "Если аргументов более 10, то выводим 10 так: ${10}"
echo "PID запущенного сценария: $$"
sleep 5 &
echo "PID последнего процесса, запущенного в фоне: $!"
ls display_
echo "Команда ls display_ завершилась статусом: $?"
ls display_arg
echo "Команда ls display_arg завершилась статусом: $?"
# Запустим сценарий
$ ./display_arg 1 98 kjk 98 njk88 kjkj 78 kjkj66 jkj k l h
Имя запущенного сценария: ./display_arg
Первые пять аргументов командной строки: 1 98 kjk 98 njk88
Всего аргументов сценария: 12
Все аргументы у запущенного сценария: 1 98 kjk 98 njk88 kjkj 78 kjkj66 jkj k l h
Если аргументов более 10, то выводим 10 так: k
PID запущенного сценария: 3316
PID последнего процесса, запущенного в фоне: 3317
ls: невозможно получить доступ к display_: Нет такого файла или каталога
Команда ls display_ завершилась статусом: 2
display_arg
Команда ls display_arg завершилась статусом: 0
$

Из приведенного скрипта видно, что:

$0

хранит имя команды, запустившей сценарий

$1-$n

переменные хранят 1, 2, 3,…n позицию аргументов команды

$#

хранит количество аргументов команды

$*

хранит значение всех аргументов командной строки через пробел

$@

хранит значение всех аргументов командной строки в виде списка

$$

хранит PID запущенного сценария (процесса)

$!

хранит значение PID последнего процесса, запущенного в фоне

$?

Статус выхода запущенной последней программы. Он так же называется кодом условия, кодом возврата. По соглашению, ненулевое значение статусы завершения соответствует значению false и обозначает неудачное завершение процесса. Код выхода равный 0 соответствует true и обозначает успешное завершение программы. (в нашем примере ls display_ завершилось с ошибкой и кодом выхода 2, т.к. файла или каталога display_ не существует)

Действия над переменными 2

Хочу дополнить возможные действия над переменным: сдвиг и инициализация переменных. Опять же, проще будет понять данные действия на практике:

$ cat set_shift
#! /bin/bash
echo "var1=$1   var2=$2         var3=$3"
shift
echo "var1=$1   var2=$2         var3=$3"
shift
echo "var1=$1   var2=$2         var3=$3"
shift
echo "var1=$1   var2=$2         var3=$3"

echo "Посмотрим как присваиваются переменные командой set"
set как это присваивается
echo "Вот $1 $3 $2"
$ ./set_shift mama papa dom
var1=mama       var2=papa               var3=dom
var1=papa       var2=dom                var3=
var1=dom        var2=           var3=
var1=   var2=           var3=
Посмотрим как присваиваются переменные командой set
Вот как присваивается это
$

Как видно, команда shift «сдвигает» позиционные параметры, в результате чего параметры «сдвигаются» на одну позицию влево.

X <- $1, $1 <- $2, $2 <- $3, $3 <- $4, и т.д.

Прежний аргумент $1 теряется, но аргумент $0 (имя файла сценария) остается без изменений.

Команда set устанавливает позиционные переменные на основе переданных ей аргументов, разделенных пробелами. Соответственно, команде set возможно передать в виде аргументов и вывод какой-либо команды в виде set $(command). .

P.S. Забыл указать на такой момент.Кроме использования ссылки на переменную в формате $имя_переменной, возможен и такой синтаксис: ${имя_переменной}. Данный синтаксис позволяет объединить переменную с другим текстом. Пример:

server:~# var10=alex
server:~# echo $var10ander

server:~# echo ${var10}ander
alexander

Как видно в примере, при попытке вывести значение переменной $var10ander выводится пустая строка, и правильно, потому что такой переменной нет. при заключении переменной в фигурные скобки — значение переменной объединяется с последующим текстом.

Резюме

На сегодня это все. Думаю представление о том, как работают переменные в bash, я изложил понятно. Желаю вам побольше практики!

Хочу сказать спасибо товарисчу — начальнику бога http://poplinux.ru/ за некоторые процитированные в статье примеры.

Переменные среды́ UNIX

Основная статья: Переменная среды Unix

Переменные среды́ устанавливаются пользователем или сценариями оболочки. Начальный набор переменных задаётся стартовыми сценариями операционной системы и сценариями, запускаемыми при регистрации пользователя в системе, в частности, и .

Среда имеет большое значение в UNIX-системах, так как хранит множество настроек как системы в целом, так и отдельных программ

Важной особенностью является то, что при создании дочерний процесс получает локальную копию среды́ родительского процесса, а, значит, не может изменить напрямую глобальные установки.. Среда представляет собой набор пар «имя переменной» и «значение переменной», реализация управления которыми возложена обычно на командный интерпретатор. Так как существует достаточно большое количество интерпретаторов, синтаксис отличается в зависимости от используемого пользователем

Как «имя», так и «значение» чувствительны к регистру символов, «Имя» обычно указывается в верхнем регистре, использование пробелов недопустимо

Так как существует достаточно большое количество интерпретаторов, синтаксис отличается в зависимости от используемого пользователем. Как «имя», так и «значение» чувствительны к регистру символов, «Имя» обычно указывается в верхнем регистре, использование пробелов недопустимо.

Среда представляет собой набор пар «имя переменной» и «значение переменной», реализация управления которыми возложена обычно на командный интерпретатор. Так как существует достаточно большое количество интерпретаторов, синтаксис отличается в зависимости от используемого пользователем. Как «имя», так и «значение» чувствительны к регистру символов, «Имя» обычно указывается в верхнем регистре, использование пробелов недопустимо.

В сценариях обычно используются объявления вида , но конкретный синтаксис зависит от используемого интерпретатора.

Для получения значения переменной необходимо перед её именем поставить символ доллара. Также иногда требуется заключить имя в скобки (например, в сценариях утилиты make).

Из командной строки управление переменными осуществляется с помощью export и env.

Настройка глобальных переменных окружения

Гло­баль­ные пере­мен­ные окру­же­ния вид­ны из всех про­цес­сов дочер­не­го про­цес­са, создан­ных про­цес­сом, кото­рый уста­нав­ли­ва­ет гло­баль­ную пере­мен­ную сре­ды. Метод, исполь­зу­е­мый для созда­ния гло­баль­ной пере­мен­ной окру­же­ния, заклю­ча­ет­ся в созда­нии локаль­ной пере­мен­ной сре­ды, а затем ее экс­пор­та в гло­баль­ную среду.

Это выпол­ня­ет­ся с помо­щью коман­ды export:

YAML

$ echo $andreyex_test
testing a long string
$ export andreyex_test
$ bash
$ echo $andreyex_test
testing a long string
$

1
2
3
4
5
6
7

$echo$andreyex_test
testingalongstring

$exportandreyex_test

$bash

$echo$andreyex_test
testingalongstring
$

После того, как мы исполь­зу­ем экс­порт коман­ды в локаль­ной пере­мен­ной сре­ды andreyex_test, мы нача­ли новый про­цесс обо­лоч­ки и про­смот­ре­ли зна­че­ние пере­мен­ной сре­ды andreyex_test. На этот раз коман­да export сде­ла­ла гло­баль­ную пере­мен­ную сре­ды гло­баль­ной, поэто­му она сохра­ни­ла свою ценность.

Совет:
Обра­ти­те вни­ма­ние, что при запус­ке экс­пор­та коман­ды в локаль­ной пере­мен­ной сре­ды вы не исполь­зу­е­те знак дол­ла­ра для ссыл­ки на имя переменной.

Переменные средЫ

Давайте поговорим о переменных среды. Данные переменные, заданы в и инициализируются при загрузке, либо при выполнении команды «. .файл_инициализации». Обычно, основные значения переменных среды следующие:

$BASH

В переменной $BASH содержится полный путь до исполняемого файла командной оболочки Bash.

$BASH_VERSION

В переменную $BASH_VERSION записывается версия Bash.

$CDPATH

Переменная, которая хранит пути поиска каталога. (используется при вводе команды cd имя_каталога без слэша)

$CLASSPATH

содержит список каталогов для поиска файлов классов Java и архивов Java.

$HOME

домашний каталог текущего пользователя.

$HOSTNAME

В переменной $HOSTNAME хранится имя компьютера.

$HISTSIZE

количество событий, хранимых в истории за 1 сеанс

$HISTFILE

Расположение файла истории событий

$HISTFILESIZE

количество событий, хранимых в истории между сеансами

$IFS

переменная хранит символы, являющиеся разделителями команд и параметров. (по умолчанию — пробел, табуляция и новая строка)

$LANG

текущая установка локализации, которая позволяет настроить командную оболочку для использования в различных странах и на различных языках.

$MAIL

Место, где храниться почта

$OSTYPE

В переменной $OSTYPE содержится описание операционной системы.

$PATH

список каталогов для поиска команд и приложений, когда полный путь к файлу не задан.

$PS1

PS1 используется как основная строка приглашения. (то самое #)

$PS2

PS2 используется как вторичная строка приглашения.

$PROMPT_COMMAND

Эта команда должна быть выполнена до отображения строки приглашения Bash.

$PWD

полный путь к текущему рабочему каталогу.

$SHELL

полный путь к текущей командной оболочке.

$USER

В переменной $USER содержится имя текущего пользователя.

Локальное определение переменных

Пользовательские переменные

Далеко не всегда нужно определять переменные глобально. Например, вам может понадобиться добавить /home/my_user/bin и текущий рабочий каталог (где вы находитесь) к переменной , но при этом не нужно, чтобы это добавление появилось и в переменной у всех остальных пользователей. Если вы хотите определить переменную среды локально, используйте или . Пример расширения PATH в для локальных нужд:

~/.bashrc

#(двоеточие без последующего указания каталога означает текущий рабочий каталог)
PATH="${PATH}:/home/my_user/bin:"

Обновление вашей переменной PATH произойдет, когда вы выйдете и снова войдете в систему.

Сеансовые переменные

Иногда нужны еще более жесткие ограничения. Вам может потребоваться возможность запуска исполняемых файлов из специально созданного временного каталога без указания полного пути к ним, и без изменения файла ради нескольких минут.

В этом случае можно просто определить переменную PATH для текущего сеанса командой . Переменной будет присвоено временное значение до тех пор, пока вы не завершите сеанс. Пример определения сеансовой переменной среды:

export PATH=»${PATH}:/home/my_user/tmp/usr/bin»

Список переменных среды

Наиболее часто используемая команда для отображения переменных среды — printenv. Если имя переменной передается в качестве аргумента команды, то отображается только значение этой переменной. Если же аргумент не указан, printenv выводит список всех переменных.

Например, чтобы отобразить значение переменной среды HOME, вы должны выполнить:

Вы также можете передавать команде printenv более одного аргумента:

Если вы запустите команду printenv или env без аргументов, тогда вы получите список всех переменных среды:

Ниже приведены несколько наиболее популярных имен переменных среды:

  • USER — Текущий пользователь системы.
  • HOME — Домашняя директория пользователя.
  • EDITOR — Редактор по умолчанию. Это редактор, который будет использоваться при вводе edit в терминале.
  • SHELL — Путь к оболочке текущего пользователя, такой как bash или zsh.
  • LOGNAME — Имя текущего пользователя
  • PATH — Список каталогов, которые нужно обойти при выполнении команд. Когда вы запускаете команду, система будет искать в этих каталогах исполняемый файл и использовать первый найденный.
  • LANG — Настройки языка.
  • TERM — Текущий терминал.
  • MAIL — Местоположение, где хранится почта текущего пользователя.

Команды printenv и env выводят только переменные окружения. Если вы хотите получить список всех переменных, включая окружение, оболочку и переменные, а также функции оболочки, вы можете использовать команду set без аргументов:

Команда отобразит большой список всех переменных, поэтому правильнее будет направить вывод в команду less.

Конечно, можно использовать echo для вывода переменной оболочки. Например, чтобы вывести значение переменной BASH_VERSION выполните:

Рейтинг
( Пока оценок нет )
Editor
Editor/ автор статьи

Давно интересуюсь темой. Мне нравится писать о том, в чём разбираюсь.

Понравилась статья? Поделиться с друзьями:
IP-файл
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: