Алиасы команд в Linux’e для разработчика

Современному разработчику в своей повседневной деятельности часто требуется вводить большое количество длинных консольных команд. Особенно это касается Докер’a, так как приходится сначала обращаться к одному из контейнеров, а уже после этого выполнять требуемые операции. Конечно, есть вариант подключаться к разным контейнерам для выполнения команд, но это тоже дело довольно хлопотное и надоедает практически сразу же. В этой статье будет описан один из возможных вариантов решения этой проблемы — создание алиасов.

Если вы используете Windows, то для применения приемов работы из этой статьи вам необходимо установить WSL, так как они основаны на командной оболочке (консоли) Bash и утилите для сборки программ make.

Памятка команд работы с алиасами:

# Отображение списка алиасов текущей сессии работы с консолью.
alias
# Добавление алиаса в текущую сессию работы с консолью.
alias my-super-mega-ls='ls -la'
# Удаление алиаса из текущей сессии работы с консолью.
unalias my-super-mega-ls
# Удаление всех алиасов для текущей сессии работы с консолью.
unalias -a

При запуске консоли Bash выполняет файл свой файл настроек «~/.bashrc» из домашней директории пользователя.

Тильда «~» обозначает домашнюю директорию текущего пользователя.

При желании можно добавлять свои алиасы команд в него, но это не очень удобно, да и может привести к случайным ошибкам. В файле «.bashrc» рекомендуется создавать отдельный файл «.bash_aliases» в корневой директории пользователя и добавлять свои команды туда.

...
# Alias definitions.
# You may want to put all your additions into a separate file like
# ~/.bash_aliases, instead of adding them here directly.
# See /usr/share/doc/bash-doc/examples in the bash-doc package.
 
if [ -f ~/.bash_aliases ]; then
    . ~/.bash_aliases
fi
...

Такой вариант уже неплох, но все же недостаточно удобен. При передаче проекта другим участникам команды разработки, им придется обновлять у себя этот файл. Одни будут забывать это делать, другие лениться, пока использование этот файла не сойдет на нет. Поэтому, размещать его желательно в корне проекта, чтобы он был на виду, также как и другие важные файлы наподобие «docker-compose.yml», «ReadMe.md», «.env», «.gitignore» и так далее.

Пример файла с алиасами (.bash_aliases):

alias my-super-ls='ls -l'
alias my-super-puper-ls='ls -la'
alias migrate-fresh='docker exec CONTAINER_NAME php migrate:fresh --all'

Для активации алиасов из файла .bash_aliases введите в консоль:

cd YOUR_PROJECT_DIRECTORY
source .bash_aliases

или

cd YOUR_PROJECT_DIRECTORY
. .bash_aliases

Все это дело можно автоматизировать путем создания символической ссылки с .bash_aliases из вашего текущего проекта на .bash_aliases в корневой директории пользователя. Таким образом, при каждом запуске Bash’a ваши алиасы будут подхватываться без каких-либо лишних телодвижений. Если вы работаете над одним большим проектом, то это самый удобный и простой вариант — один раз настроил и забыл.

ln -s ПУТЬ_ДО_ДИРЕКТОРИИ_ПРОЕКТА/.bash_aliases ~/.bash_aliases

Алиасы помогают существенно сэкономить время на вбивание команд в консоль, но бывают ситуации когда и их мощи недостаточно. Например, иногда требуется выполнить сразу несколько больших команд для сброса всех кешей проекта, зачистки базы данных с последующим заполнением тестовыми данными или переустановки прав доступа для текущего пользователя. Можно было бы и в этом случае использовать алиасы Bash’a со склейкой команд через &&, но поддерживать и редактировать подобные монструозные конструкции станет сложно, а это уже может привести к ошибкам.

Для подобных задач можно использовать утилиту make. Реализуется это очень просто — создайте файл Makefile в корне проекта и добавьте в него требуемые наборы команд, например:

my-super-ls-command:
	ls
	ls -a
	ls -l
	ls -la

Команды необходимо размещать на отдельных строках через Tab от края файла.

Вызов команды:

make my-super-ls-command

Все команды добавленные в Makefile будут автокомплититься через Tab аналогично любым системным командам.

Полезные ссылки

06.01.2021

Категория(-и): Linux

# # #

Добавить комментарий