- PVSM.RU - https://www.pvsm.ru -
О zsh не раз писали на хабре. Однако, и как те топики, и как мои личные наблюдения, показывают, что большинство людей, знакомых с zsh, используют его как bash с продвинутым автокомплитом. Да и тот (автокомплит) используют не на полную катушку.
Я не хочу описывать как раскрасить консоль во все цвета радуги или сделать промт, показывающий всё на свете. Я хочу показать, что возможности zsh гораздо шире, и его использование в качестве основной оболочки может сделать вашу работу немного краше.
В zsh они бывают четрырёх видов:
Про первые два вида писали и не раз. Интереснее два последних.
alias -g g="| grep"
alias -g l="| less"
позволит вместо
cat where | grep what | less
делать
cat where g what l
Пример утрированный, и в реальности алиасы могут (и должны) быть сложнее. Но даже этот пример показывает профит для тех, кому приходится много грепать и работать с пайпами.
Без указания флага при создании алиаса, он ведет себя и как стандартный и как глобальный. Но я рекомендую указывать флаг для избежания неоднозначностей.
Алиасы можно временно выключать/включать при помощи
disable -a aliasname
enable -a aliasname
Также, если алиас переназначает какую-либо команду, можно достучаться и до неё
aliasname
#or
=aliasname
hash -d apl=/private/var/log/apache2
hash -d p1=/srv/www/project1/html
Теперь для перехода в директорию, обозначенную как хэш, достаточно выполнить
cd ~hashname
или вовсе
~hashname
если вы пользуетесь опцией autocd.
Разумеется, хэши можно использовать и в любых иных операциях, связанных с файловыми путями:
cat ~hashname/file
cp ~hashname/file /path/somewhere
Он в zsh поистине могуч.
Помимо того, что он умеет дополнять опции многих команд (да и свой комплит написать несложно), zsh позволяет крутить им как угодно:
zstyle ':completion:*:processes' command 'ps -ax'
zstyle ':completion:*:*:kill:*:processes' list-colors '=(#b) #([0-9]#)*=0=01;32'
zstyle ':completion:*:*:kill:*' menu yes select
zstyle ':completion:*:kill:*' force-list always
zstyle ':completion:*:processes-names' command 'ps -e -o comm='
zstyle ':completion:*:*:killall:*' menu yes select
zstyle ':completion:*:killall:*' force-list always
Данный конфиг доставит нам комплит для комманд kill и killall:
DevMan% killall F
Finder ForkLift
DevMan% kill 502
502 ?? 2:49.10 /Applications/Safari.app/Contents/MacOS/Safari -psn_0_53261
823 ?? 14:29.44 /System/Library/StagedFrameworks/Safari/WebKit2.framework/WebProcess.app ...
1509 ?? 4:28.21 /Applications/Xmarks for Safari.app/Contents/MacOS/Xmarks for Safari -psn_0_340051
Решение о том стоит ли применять регистронезависимый комплит оставляю вам. Хотя лично я от него получаю намного больше пользы, чем вреда.
Хуки [1] — функции, вызывающиеся при определённом событии.
Я активно использую 3 из них:
Первый использую для восстановления всех консолей в тех директориях, в которых находился до ребута/логаута.
Второй и третий хуки я использую, в частности, для уведомления о процессах, выполняющихся дольше заданного времени: запустил, например, сборку проекта и переключился на выполнение других задач, когда сборка закончится в notification center прилетит уведомление о готовности.
ls *(.) # показать только файлы
ls *(.om[1]) # показать самый свежий файл
ls -l *(.m0) # показать файлы измененные сегодня
ls **/style.css # найти style.css по всем дискам
ls -l *(.Lk+50) # показать все файлы более 50 Кб
ls **/*(.Lm+5) # показать файлы более 5 Мб по всем дискам
ls *.^log # показать все файлы, кроме .log
vi *(.om[1]) # открыть самый свежий файл
# многое из магии требует setopt EXTENDED_GLOB
Это ничтожный пример того, на что способен zsh.
Не были затронуты модули, которых достаточно.
В качестве учебного пособия, кроме родных манов и гайда, рекомендую поизучать
Если тема будет интересна, продолжим.
Приятного всем кодинга!
Автор: DevMan
Источник [5]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/shell/23985
Ссылки в тексте:
[1] Хуки: http://zsh.sourceforge.net/Doc/Release/Functions.html#Hook-Functions
[2] oh-my-zsh: https://github.com/robbyrussell/oh-my-zsh
[3] zsh-completions: https://github.com/zsh-users/zsh-completions
[4] ZWS: http://www.chodorowski.com/projects/zws/
[5] Источник: http://habrahabr.ru/post/164597/
Нажмите здесь для печати.