Linux Tools: shells, ash #6 - environment variables

linux linux-tools shell ash

Уже достаточно много раз говорили о переменных и environment-переменных , в этом разделе разберем встроенные переменные ash

Предыдущая статья: shells, ash #5 - ash functions

HOME

Домашняя директория пользователя и passwd файла, переменная устанавливается командой login и используется множеством разных команд, например, командой cd без параметров для перехода в домашнюю директорию пользователя

Для проверки можно запустить ash без env-переменных от root пользователя и выполнить команду login

## запускаем ash без env-параметров текущего shell и под root
## root - нужен для запуска login,
## иначе будет ошибка login: must be suid to work properly
$ sudo env -i /usr/bin/ash

## далее одинарная решетка это prompt root пользователя
# env
SHLVL=1
PATH=/sbin:/usr/sbin:/bin:/usr/bin
PWD=/home/ubuntu

# login -f ubuntu
## ...
PATH=/home/ubuntu/bin:/home/ubuntu/.local/bin:/data/bin:/bin:/usr/bin
PWD=/home/ubuntu
SHLVL=1
USER=ubuntu
HOME=/home/ubuntu
## ...

PATH

Список директорий разделенный двоеточиями

В этих директориях shell ищет программы, подробнее процесс поиска мы рассмотрели в статье с выполнением команд

CDPATH

Путь относительно которого работает команда cd

# задаем CDPATH=/home/ubuntu
$ export CDPATH=/home/ubuntu

$ cd
/home/ubuntu

# теперь все относительные пути без указания первого слэша
# будут считаться относительно /home/ubuntu
$ cd tmp
# мы в /home/ubuntu/tmp - если такая директория существует

MAIL

Следующие 3 env-переменных нужны для проверки почты, точнее в самом shell реализовано слежение за изменением в файле

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

MAILCHECK

в MAILCHECK устанавливается время в секундах, через сколько нужно проверять файл или файлы указанные в MAIL или MAILPATH

По умолчанию = 60

Если поставить 0, то проверка будет происходит после каждого выполнения команды, В доке формулируется так “If set to 0, the check will occur at each prompt”, то есть при каждом показе приглашения к вводу команды.

MAILPATH

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

если указан MAILPATH, то MAIL игнорируется.

работает это так

$ touch ~/mail.txt
$ export MAILPATH=/home/ubuntu/mail.txt
$ export MAILCHECK=5

# меняем файл, в случае почтовых программ они меняют файл
# и bash видимо умеет их парсить и выводить даже количество писем
$ echo 1 >> ~/mail.txt

# далее после выполнения команды или просто пустой строки ash выведет
$
you have mail
$
# то есть проверка происходит перед показом prompt

PS1

Prompt String - это основная подсказка к вводу команды и по умолчанию для обычного пользователя это переменная равна $ (доллар и пробел), для суперпользователя root # (решетка и пробел)

значение может содержать не специальные последовательности

# например, по умолчанию PS1 в ash выводит еще и текущую директорию
# сейчас мы в домашней директории
~ $

# а переменная равна
$ echo $PS1
\w \$

Подробнее про эти опции поговорим в статьях про bash

PS2

Подсказка ввода для многострочных команд. По умолчанию >

$ (
> echo 123
> )
123
$

PS3

Почему-то не описано в документации, возможно в ash не используется

PS4

В случае если включена трассировка опцией -x, перед каждой выполненной командой выводится значение PS4

По умолчанию равно +

$ set -x
$ echo 1 ; echo 2
+ echo 1
1
+ echo 2
2
$

IFS

Input Field Separators

Разделители при чтении и выводе параметров - подробнее разберем в следующей статье про Special Parameters (здесь будет ссылка на статью)

TERM

В переменной содержится название текущего терминала, и используется программами для определения возможностей терминала, например, программа может определить поддерживает ли терминал цвета (xterm или xterm-256color)

HISTSIZE

Сколько команд хранить в истории shell’a (это переключение истории команд стрелками)

По умолчанию равно 15

PWD

Текущая директория, эту переменную меняет команда cd

OLDPWD

Предыдущая директория

PPID

ID процесса текущего shell

$ echo $PPID
1527

 

Итого

В статье разобрали все возможные Environment Variables в ash, больше переменных и логики будет в bash

 

Предыдущая статья: shells, ash #5 - ash functions

 

Ссылки

 


Все статьи серии “Linux Tools”