Интеграция apt и zsh: глобальные псевдонимы субкоманд

Алексей Федорчук

Во времена, когда я был применителем openSUSE, мне очень нравился пакетный менеджер этого дистрибутива — zypper. Помимо прочих бесчисленных достоинств (а их у него, пожалуй, побольше, чем у всех остальных, вместе взятых), он обладает свойством понимать короткие формы своих внутренних команд. То есть можно дать команду

$ zypper in [packagename]

для установки пакета, или

$ zypper se [packagename]

для его поиска, вместо субкоманд install и search, соответственно. По сравнению с громоздкими конструкциями apt-get и apt-cache это выглядело очень изящно.

Реализация утилиты apt из пакета mintsystem избавила применителя от лишних сущностей вроде get и cache. Но вот понимания ей кратких форм внутренних команд для полного счастья явно не хватало.

Что же, все знают чьих рук делом должно быть спасение утопающих, хотя этот пункт в конституцию РФ пока ещё не внесли. Тем более, что в элементарном исполнении задача легко решается с помощью банальных псевдонимов, типа aptin для apt install, и так далее.

Однако это решение показалось мне не вполне изящным — в том числе и потому, что корёжит исходную команду. А поскольку я полностью погряз в Zsh’е, то решил воспользоваться одной из его убойных фишек — глобальными псевдонимами, для создания alias’ов не команды с субкомандами, а только субкоманд. Псевдонимы я частично заимствовал из краткой форму субкоманд zypper‘а, частично изобрёл сам, пытаясь сочетать краткость и мнемонику.

Определять псевдонимы для всех внутренних команд Mint-реализации apt мне показалось бессмысленным — ряд из них употребляется достаточно редко (а некоторые, типа dselect-upgrade, подозреваю, никогда), и их проще подсмотреть при необходимости в выводе

$ apt help

Так что я отобрал только те субкоманды, которые употребляю более или менее регулярно, и в том количестве, в каком в состоянии запомнить. И в результате мой ~/.zshrc пополнился следующим блоком, для удобства восприятия разбитым на секции:

### Глобальные псевдонимы
### для субкоманд утилиты apt

## Поиск и информация
alias -g se='search'
alias -g sh='show'
alias -g ve='version'
alias -g ct='content'
alias -g cs='contains'
alias -g dep='depends'
alias -g rec='recommends'

## Установка и обновление
alias -g in='install'
alias -g ri='reinstall'
alias -g si='source'
alias -g up='update'
alias -g ug='upgrade'
alias -g dup='dist-upgrade'

## Смена статуса
alias -g he='held'
alias -g ho='hold'
alias -g uh='unhold'

## Удаление и очистка
alias -g rm='remove'
alias -g pu='purge'
alias -g ar='autoremove'
alias -g cl='clean'
alias -g ac='autoclean'

Далее интересно было бы заняться фильтрацией вывода команды

$ apt se *

на предмет выявления пакетов с различным статусом (например, автоматически установленных или удалённых с сохранением конфигов) с помощью всё тех же глобальных псевдонимов, но об этом — как-нибудь в другой раз.

Интеграция apt и zsh: глобальные псевдонимы субкоманд: 2 комментария

  1. автодополнения по Tab не нравятся?
    псевдонимы другие утилиты не поломают случаем? Они же «глобальные».

  2. Автодополнения (в данном случае) не нравятся.
    А на счёт поломатия — да, надо проверять на совпадение с имеющимися командами, дважды напарывался. Но поскольку они таки глобальные — не очень критично, в отличие от обычных псевдонимов.

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