Zsh. Псевдонимы

И, наконец, такое мощное средство минимизации пользовательского ввода, как псевдонимы команд (aliases). Разумеется, в zsh (как и в bash или tcsh) псевдоним может быть присвоен любой команде со сколь угодно длинным набором опций. Так, куда как проще раз и навсегда определить команду ls как псевдоним самой же себя, но с опциями -FG, нежели каждый раз вспоминать, как отличить в ее выводе каталоги от обычных файлов.

Однако zsh идет дальше: в нем это дополняется возможностью определения псевдонимов для командных конструкций -- перенаправлений ввода/вывода и командных конвейеров в форме опции -g (от global aliases -- именно так именуется эта возможность). Так, всем известно, что для обеспечения постраничного вывода любой команды (например, той же ls) вывод этот нужно передать по конвейеру (pipe) программе-pager'у (less, more или most). Однако не лениво ли -- каждый раз вводить что-нибудь вроде

$ ls | less

да еще и не забывать это делать? Если лениво -- на помощь придут глобальные псевдонимы. Опять же раз и навсегда определяем, что опция -g со значением L есть псевдоним для конвейера '| less':

$ alias -g L='| less'

после чего имеем возможность, указывая ее после команды, требующей постраничного ввода, именно его и получать:

$ ls L

Очень эффективно применение псевдонимов командных конструкций для подавления нежелательного вывода сообщений об ошибках. Всем пользователям команд find и grep известно, что при поиске файлов или текстовых фрагментов за пределами домашнего каталога сплошь и рядом приходится сталкиваться с ситуациями, когда полезный вывод команды тонет в ворохе сообщений типа

find: /var/spool/: Отказано в доступе

Бороться с этим достаточно легко -- надо только перенаправить вывод подобных сообщений в бездонную прорву устройства /dev/null, например, так:

$ grep -R 'искомая последовательность символов' * 2> /dev/null

Однако и это достаточно лениво, не говоря уж о том, что постоянно забывается. А вот если раз и навсегда определить псевдоним типа

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

И тогда необходимость напрягать память в каждом случае исчезнет: команда типа

$ grep -R Linux /home/data/work/books N

выведет только полезную информацию. А если добавить ещё и опцию L --

$ grep -R Linux /home/data/work/books N L

она будет представлена постранично.

. .