Как пользователь Linux, я всегда использовал bash, потому что он использовался по умолчанию в каждом дистрибутиве, который я использовал. Люди, использующие другие системы Unix, такие как BSD, используют другие оболочки гораздо чаще. Чтобы узнать немного больше, я решил попробовать Zsh.
Как пользователь bash:
- Какие функции я буду скучать?
- И что я должен высматривать?
Ответы:
Эта тема уже активно обсуждалась на других сайтах Stack Exchange. Насколько я помню, мой опыт перехода с bash на zsh (это было много лет назад) - я не пропустил ни одной вещи. Я многое приобрел; Вот что я думаю о простых специфических для zsh функциях, которые я использую больше всего:
Функция zsh, которую мне больше всего не хватает, когда я время от времени использую bash, - это autocd: в zsh выполнение каталога означает его изменение при условии, что вы включите эту
autocd
опцию.Еще одна очень полезная функция - это модная шумиха. Эти
иероглифысимволы немного трудно запомнить , но очень удобно (как это часто бывает быстрее искать их , чем писать эквивалентнуюfind
команду). Несколько простых примеров:foo*~*.bak
= все совпадения,foo*
кроме совпадающих*.bak
foo*(.)
= совпадение только с обычными файламиfoo*
foo*(/)
= совпадение только с каталогамиfoo*
foo*(-@)
= совпадение только с символическими ссылкамиfoo*
foo*(om[1,10])
= совпадение 10 самых последних файловfoo*
foo*(Lm+1)
= только файлы размером> 1 МБ = в каталоге и во всех его подкаталоги, рекурсивно⁴dir/**/foo*
foo*
dir
Для причудливых переименований
zmv
может пригодиться встроенная функция. Например, чтобы скопировать каждыйfile
вfile.bak
:zmv -C '(*)(#q.)' '$1.bak'
И bash, и zsh имеют приличную систему завершения, которую нужно включить явно (
. /etc/bash_completion
илиautoload -U compinit; compinit
). Zsh's гораздо более настраиваемый и в целом более привлекательный.Если вы запускаете zsh без
.zshrc
, он запускает интерактивное меню, которое позволяет вам выбрать параметры конфигурации. (В некоторых дистрибутивах это можно отключить; в этом случае запуститеautoload zsh-newuser-install; zsh-newuser-install
.) Я рекомендую включить рекомендуемые параметры истории, включить завершение (в «новом стиле») и включить «общие параметры оболочки», за исключениемbeep
. Позже настройте дополнительные параметры по мере их обнаружения.² В то время программируемое завершение было убийственной особенностью zsh, но вскоре его приобрел bash.
⁴ Функции, которые bash приобрел только в версии 4 (поэтому они еще не доступны во многих системах), относятся к более мелкому типу.
источник
autocd
функцию, которую вы обсуждали выше. Включите функцию с помощью командыshopt -s autocd
. Тогда функция работает так, как вы описали.where
команда, которую не следует путать сwhich
командой.-exec
оболочкой для таких вещей, как выделение с помощьюe
и конвейерная обработка в такие инструменты, какsort
иsed
для перезаписиe
и сортировки). Конечно, более многословно.Также завершение вкладки по умолчанию лучше, чем bash ... например ...
~/.e.d
TAB расширится до~/.emacs.d/
Zsh, Bash просто подаст звуковой сигнал.источник
setopt
вариант не по умолчанию вы используете для этого (если есть)?_-.
поставил подстановочный знак.zstyle ':completion:*' matcher-list 'm:{a-zA-Z}={A-Za-z}' 'r:|[._-]=* r:|=*' 'l:|=* r:|=*'
, См stackoverflow.com/q/7906078/311660zsh
позволяет редактировать многострочную команду (см. zsh line editor ), bash - нет. Если вы попробуете тот же трюк (Ctrl-p
), bash получит последнюю команду.источник
Bash имеет возможность открывать порты, используя
или же
Тем не менее, он отключен в Debian, поскольку рассматривается как препятствие (если путь действительно существует) и выходит за рамки того, что должна делать оболочка. Больше информации [список рассылки debian]
источник
Который - улучшен в Zsh
Команда
which
в bash показывает только местоположение команды.В Zsh
which
покажут определениеalias
, источникfunction
и расположение команды.Допустим, у нас был псевдоним оболочки:
В Bash, если мы спросим:
which gg
результат будет недействительнымВ Zsh:
which gg
даст нам ...Допустим, у нас была функция оболочки:
В Bash, если бы мы спросили:
which hello
результат будет недействительным.В Zsh:
which hello
даст нам ...источник
type
(встроенную) команду. И просто чтобы придираться:which
это внешняя команда, а не встроенная команда bash.зш - полная оболочка
Многие из них, прочитав
zshcontrib(1)
одну, могут обнаружить две версииautoload
играбельныхtetris
игр (другая сncurses
),zsh
конкурирующимиemacs
за полноту (как описано).знак равно
Я хотел бы упомянуть
=
ключевое слово, которое может вызвать раздражениеcurl
(URL обычно есть?var=val
в них; но этоunsetopt
возможно, я думаю):q file =less
(gentoo
) решает вq file $(which less)
=
расширяется до полного пути рассматриваемой команды.другие вкусности
другие вещи, вне сознания, - это правильное приглашение
RPS1=%d
(для отображения$PWD
в стиле), Alt + H(run-help
то есть.man
), Alt + ? (which-command
)vared
иzed
(autoload
функция), минимаффероподобный Emacs Alt + Xдля выполнения виджетов без их привязки, глобальные и суффиксные псевдонимы, расширенная длительность выполнения команды отслеживания истории-m
и-regex
соответствия, эмуляция оболочки (напримерcsh
,ksh
с помощьюemulate
) иautoload
run-help
с фрагментами файлов для встроенных модулей.плач Иеремии
Я думаю, что большинство, если не все, функции были реализованы давным-давно, и, читая журналы изменений, нет никаких серьезных изменений и добавлений новых функций, что очень печально (больше нечего исследовать и открывать).
bash
кажется, более распространены вreadline
(в противоположностьzle
) иgnu history
в духе Linux; Например, функции readline и сочетания клавиш могут применяться глобально (как хранятся в~/.inputrc
и/etc/inputrc
), если они не переопределяются специфичными для bashbind
.заключение
Я лично думаю
emacs
(особенно из-за перспективы (нынешнего?)emacs-nox
Аромата), который послужил вдохновением для такого исключительного программного обеспечения,zsh
иtmux
сделал очень хорошую работу, чтобы быть примером в такой реализации; для людей, ценящих его ценность (до уровня не нуждающихся / зависящих отX
сервера). Оболочка Unix достаточно мощная, а ее непрерывность и согласованность достаточны для правильного рабочего процесса и производительности (в целом вычислений).источник