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
Ссылки #
- https://man7.org/linux/man-pages/man1/dash.1.html
- https://man7.org/linux/man-pages/man1/login.1.html
- https://github.com/mandober/enwars#mail
- https://unix.stackexchange.com/questions/528323/what-uses-the-term-variable