Запущенная оболочка хранит в переменных множество важной информации: путь для поиска, текущий каталог, предпочитаемый текстовый редактор, даже настраиваемое приветствие командной строки и многое другое. Переменные запущенной командной оболочки в совокупности называются окружением.
Для просмотра определенных переменных в системе можно использовать команду printenv. Например, чтобы увидеть значение переменной HOME, которая хранит путь к домашней директории пользователя, можно использовать следующую команду
$ printenv HOME
/home/user
Запуск этой команды без аргументов покажет вам все, определенные в системе, переменные.
Командная оболочка подставляет на место имени переменной ее значение. Чтобы оболочка знала, что это переменная, необходимо перед ее именем поставить знак ‘$‘. Например $HOME, $USER и т.д.
Самый простой способ увидеть, как оболочка обрабатывает командную строку, использовать команду echo
$ echo User is $USER and his file here: $HOME
User is user and his file here: /home/user
Предопределенные переменные.
Некоторые переменные предопределены оболочкой. Их значения устанавливаются автоматически при входе в систему. Имена таких переменных традиционно написаны заглавными буквами. Некоторые из них указаны в таблице ниже.
Переменная | Значение |
---|---|
HOME | Хранит значение пути к домашней директории пользователя. |
USER | Хранит значение имени пользователя. |
PATH | Хранит значение путей к исполняемым файлам. |
PS1 | Шаблон приглашения командной строки |
EDITOR | Хранит значение текстового редактора по умолчанию |
HISTSIZE | Максимальное число хранимых команд в истории |
HSITFILE | Хранит имя файла для записи bash history |
HSITFILESIZE | Количество команд, хранящихся в файле журнала в данный момент |
HISTCONTROL | Определяет параметр хранения дубликатов команд в истории ‘ignoredups‘ — не записывать дубликаты ‘erasedups’ — удалить дубликаты ‘ignorespace’ — не отображать в истории команды, начинающиеся с пробела. |
HISTIGNORE | Позволяет не регистрировать в истории определенные команды |
PWD | Текущий каталог |
Переменная $PATH.
Когда оболочка впервые встречает какую-либо команду, например ls, то она должна понимать какой именно исполняемый файл ей необходимо запустить. И именно, то место где искать исполняемый файл и хранится в переменной PATH.
$ echo $PATH
/home/user/.local/bin:/home/user/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/var/lib/snapd/snap/bin
Каталоги для поиска разделяются двоеточиями (:). Для большей наглядности, давайте преобразуем их в переводы строки, передав команде tr, которая заменяет символы.
$ echo $PATH | tr : "\n"
/home/user/.local/bin
/home/user/bin
/usr/local/bin
/usr/local/sbin
/usr/bin
/usr/sbin
/var/lib/snapd/snap/bin
Оболочка просматривает все эти каталоги в порядке их перечисления и ищет в каком из них лежит нужный исполняемый файл. Поэтому, если есть программы с одинаковыми названиями, расположенные в разных каталогах, например, /usr/bin/ls и /bin/ls, оболочка запустит тот файл, который найдет первым.
Примечание.
Ну и еще такой нюанс, когда оболочка ищет команду по имени, она прежде всего проверяет, является ли это имя псевдонимом. Именно, поэтому псевдоним «затеняет» команду с таким же именем, так как имеет более высокий приоритет.
Чтобы найти программу в списке каталогов, можно использовать команду which.
$ which ls
alias ls='ls --color=auto'
/usr/bin/ls
$ which which
/usr/bin/which
или встроенную в оболочку более мощную и информативную команду type, которая также находит псевдонимы, функции и встроенные в оболочку команды.
$ type cp
cp является /usr/bin/cp
$ type ll
ll — это псевдонимом для «ls -l --color=auto»
$ type type
type — это встроенная команда bash
Определение своих переменных.
Переменные в оболочке можно переопределить, а так же создать свои в любое время. Сделать это можно, используя следующий синтаксис:
имя_переменной=значение_переменной
Например, если вы часто работаете с каталогом ‘/home/user/Documents‘, вы может присвоить его путь имени переменной
$ docs=$HOME/Documents
Теперь эту переменную можно использовать в качестве удобного сокращения, например при использовании команды ‘cd‘.
$ cd $docs
$ pwd
/home/user/Documents
Так же можно передавать эту переменную в любую команду, которая использует в качестве аргумента имя каталога.
$ touch file $docs
$ ls $docs
file
Примечание.
Обратите внимание, что при определении переменной не допускается использование пробелов около знака равенства. Если это не учесть, то оболочка решит, что первое слово в строке — это запускаемая команда.
Но, такие переменные не передадутся в будущие дочерние оболочки, а действовать будут только в той, в которой они созданы. Чтобы превратить локальную переменную в переменную окружения используйте команду export.
export docs=$HOME/documents
.bashrc
Когда пользователь выходит из оболочки , ее окружение удаляется. Было бы слишком трудозатратно каждый раз при входе в оболочку определять ее окружение вручную. Поэтому оно определяется файлами запуска и файлами инициализации, которые автоматически выполняются при запуске командной оболочки.
Одним из таких файлов инициализации, является файл .bashrc . Он обычно расположен в вашем домашнем каталоге. Команды, которые вы поместите в этот файл, будут выполняться автоматически при запуске экземпляра оболочки. Именно поэтому, он отлично подходит для определения переменных окружения и псевдонимов.
Вот пример файла .bashrc
# Задать путь для поиска исполняемых команд
PATH=$HOME/bin:/usr/local/bin:/usr/bin:/bin
# Задать приглашение командной строки
PS1='$ '
# Задать предпочитаемый текстовый редактор
EDITOR=/usr/bin/vi
# Начать в рабочем каталоге
cd $HOME/Work/
# Определить псевдоним
alias l="ls -lah --color"
# Поприветствовать при входе в оболочку
echo "Добро пожаловать, в команду пингвинов, сынок!!!"
Изменения, которые вносите в файл .bashrc, не влияют на запущенные экземпляры оболочки. Но вы можете заставить запущенный экземпляр перечитать и применить исправленный экземпляр .bashrc следующими командами:
$ source $HOME/.bashrc
или
$ . $HOME/.bashrc
Was this helpful?
1 / 0