Переменные со значением по умолчанию
Не объявленные переменные могут принимать значения по умолчанию.
Если переменная не объявлена, то с помощью оператора — мы можем задать ей начальное значение.
Рассмотрим пример установки значения по умолчанию.
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 |
#!/bin/bash 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 |
$andreyex_test=testing $echo$andreyex_test |
Поздравляем, вы только что создали свою первую переменную. Просто помните, что в любое время вам нужно ссылаться на значение переменной среды 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 |
$andreyex_test=testingalongstring -bash: a: command not found $andreyex_test=’testing a long string’
$echo$andreyex_test |
Если оставить его без одиночных кавычек, оболочка bash предполагает, что следующий символ – это еще одна команда для обработки.
Обратите внимание, что для переменной локального окружения, которую мы определили, мы использовали строчные буквы, переменные системной среды, которые мы видели до сих пор, использовали все прописные буквы.
В оболочке bash это стандартное соглашение. Если вы настраиваете новые переменные среды, это не требуется, но рекомендуется использовать строчные буквы. Это помогает дифференцировать ваши личные переменные среды из результатов переменных системной среды.
ПРИМЕЧАНИЕ. Очень важно, чтобы между именем переменной среды, знаком равенства и значением не было пробелов. Если вы помещаете какие-либо пробелы в присваивание, оболочка bash интерпретирует значение как отдельную команду:
YAML
$ andreyex_test2 = test
-bash: andreyex_test2: command not found
$
1 |
$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 |
$bash $echo$andreyex_test $exit $echo$andreyex_test |
В этом случае мы начали дочернюю оболочку. Как вы можете заметить, переменная среды andreyex_test недоступна в дочерней оболочке (она содержит пустое значение). После того как мы оставили дочернюю оболочку и вернулись к исходной оболочке, переменная локальной среды все еще была доступна.
Аналогично, если вы установите локальную переменную окружения в дочернем процессе после того, как вы покинете дочерний процесс, переменная локальной среды перестает быть доступной:
YAML
$ bash
$ andreyex_test=testing
$ echo $andreyex_test
testing
$ exit
exit
$ echo $andreyex_test
$
1 |
$bash $andreyex_test=testing $echo$andreyex_test $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
текущая установка локализации, которая позволяет настроить командную оболочку для использования в различных странах и на различных языках.
Место, где храниться почта
$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 |
$echo$andreyex_test $exportandreyex_test $bash $echo$andreyex_test |
После того, как мы используем экспорт команды в локальной переменной среды 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
текущая установка локализации, которая позволяет настроить командную оболочку для использования в различных странах и на различных языках.
Место, где храниться почта
$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 выполните: