Cintu и Zsh. Псевдонимы глобальные и «суффиксные»

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

Псевдонимы для команд с их опциями (alias) — ещё один из простых способов минимизировать ввод командных директив, применяемый во всех оболочках. Обычно самые востребованные из них, такие, как

alias mv='mv -i'

предостващающий случайное перезаписывание одноимённых файлов при перемещении или переименовании, или

alias cp='cp -iR'

обеспечивающий, кроме того, рекурсивное копирование содержимого каталогов, заносятся в пользовательский конфиг регистрационной оболочки, в нашем случае ~/.zshrc. И они будут подробно рассмотрены при детальном его описании. Однако в Zsh имеется два вида псевдонимов (насколько я знаю, не имеющих аналогов в Bash’е и прочих shell’ах), которые ещё больше облегчают жизнь применителя этой командной оболочки.

Первый из них — так называемые глобальные псевдонимы (global alias). Всех нас раздражает ситуация, когда в ответ на попытку поиска файла утилитой find или фрагмента текста grep выводится множество сообщений о том, что доступ к некоему каталогу запрещён, которые выглядят примерно так:

find: «/var/cache/ldconfig»: Отказано в доступе

И среди которых полезная информация просто теряется.

Разумеется, каждый, кто систематически работает в CLI, знает, что для подавления этого «шума» достаточно присобачить к конструкции поиска посредством той или другой утилиты маленький аппендикс в виде 2> /dev/null, перенаправляющий все сообщения об ошибках в «нулевой» файл.

Однако в Zsh борьба с «шумом» осуществляется ещё проще: достаточно задать такой глобальный псевдоним:

$ alias -g N='2>/dev/null'

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

$ find path2 -name [filename] N

и больше не заботиться об отделении «зёрен от плевел».

Глобальные псевдонимы очень полезны в командных конструкциях перенаправления по конвейеру, например, для поэкранного представления длинного вывода какой-либо команды:

$ alias -g L='|less'

А для фильтрации вывода по вхождению последовательности символов можно задать такой глобальный псевдоним:

$ alias -g G='|grep'

После чего использовать его в конструкциях, например, поиска пакетов:

$ apt search apt G '^apt-'

В сочинительском труде весьма полезен такой глобальный псевдоним:

$ alias -g W='|wc -m'

Ибо нашему брату часто требуется прибегать к такой конструкции:

$ cat filename W

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

Второй вид уникальных псевдонимов в Zsh — псевдонимы «суффиксные» (более удачного определения их я не придумал). Подобно тому, как добавление к команде alias опции -g превращает обычный псевдоним в глобальный, так и опция -s делает его «суффиксным». То есть привязывает суффикс имени файла (в просторечии часто называемый «расширением») к некоей программе, которая может сотворить над ним нужное действо. Например, если задать псевдоним такого вида

$ alias -s txt='nano'

а затем набрать в командной строке имя указанного текстового файла (при необходимости с указанием пути к нему)

$ path2/packagename.txt

то этот самый файл будет открыт в текстовом редакторе Nano.

Это, конечно, банальщина. Но есть и более интересное применение «суффиксных» псевдонимов. Например, с их помощью можно просматривать содержимое пакетов (применительно к нашему случаю — *.deb). Для чего достаточно набрать в командной строке такое:

$ path2/arc-theme_1465131682.3095952_all.deb

то мы сразу увидим полный список входящих в него файлов.

Разумеется, определения всех постоянно используемых псевдонимов, и глобальных, и «суффиксных», не обязательно задавать каждый раз в командной строке, как в приведённых выше примерах — их резонно занести в файл ~/.zshrc. Что, кстати, и сделано в Cintu, что называется, «искаропки». То есть применителю этой системы, если он не откажется от использования Zsh в качестве login shell, не придётся заморачивать себе голову вводом ни одного из приведённых выше псевдонимов (как, впрочем, и ряда других, о чём будет сказано своевременно).

Моя Cintu. Оглавление

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