Які особливості є у zsh та відсутні у bash, чи навпаки?


62

Як користувач Linux, я завжди використовував bash, оскільки це був типовий для кожного дистрибутива, який я використовував. Люди, що використовують інші системи Unix, такі як BSD, використовують інші оболонки набагато частіше. В інтересах дізнатися трохи більше, я вирішив спробувати zsh.

Як користувач bash:

  • Які функції я пропущу?
  • І на які слід звернути увагу?


5
@Gilles колись, можливо, буде приємно, щоб усі переїхали сюди ... і злилися
xenoterracide

Відповіді:


45

На цьому сайті вже було багато активних заходів на інших сайтах Stack Exchange. Як я пам’ятаю, мій досвід переходу з bash на zsh (це було років тому²) - це те, що я не пропустив жодної речі. Я багато здобув; ось що, на мою думку, є простими функціями zsh, які я найбільше використовую:

  • Функція zsh, яку мені найбільше не вистачає, коли я періодично використовую bash, - це autocd: у zsh виконання каталогу означає змінити його за умови включення параметра. autocdturn

  • Ще одна дуже корисна особливість - химерний глобус. Ці ієрогліфи символи трохи важко запам'ятати , але дуже зручно (як це часто буває швидше шукати їх , ніж писати еквівалентну 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 без a .zshrc, він запускає інтерактивне меню, яке дозволяє вибирати параметри конфігурації. (Деякі дистрибутиви можуть відключити це; у такому випадку запустіть autoload zsh-newuser-install; zsh-newuser-install.) Я рекомендую включити рекомендовані параметри історії, увімкнути завершення ("нового стилю") та включити "загальні параметри оболонки", за винятком beep. Пізніше налаштуйте додаткові параметри під час їх виявлення.

² На той час програмоване завершення було вбивчою функцією zsh, але bash придбав його незабаром.
Особливості, які баш придбали лише у версії 4 (тому вони все ще не доступні у багатьох системах), мають менший тип.


5
Bash 4.0 тепер підтримує autocdфункцію, про яку ви говорили вище. Увімкніть функцію за допомогою команди shopt -s autocd. Тоді функція працює так, як ви описали.
Philluminati

zsh також має вбудовану whereкоманду, не плутати її з whichкомандою.
Сілдорет

@EdGrimm Я думаю, що GNU і FreeBSD знайти можуть зробити все, що можна зробити класифікаторами zsh (з -execоболонкою для таких речей, як вибір eі конвеєр в такі інструменти, як sortі sedдля переписування eта сортування). Набагато багатослівніше, звичайно.
Жиль

Після перевірки та повторної перевірки сторінки пошуку на протязі більше десяти років, я здогадуюсь, я перестав справді шукати. Але якби я перевірив останній раз перед тим, як коментувати, я б принаймні побачив, що параметр -size тепер знімає одиниці до байтів.
Ед Грімм

11

Також заповнення вкладки за замовчуванням краще, ніж bash ... наприклад ...

~/.e.dTAB розшириться на ~/.emacs.d/zsh, bash просто подає звуковий сигнал.


це не сталося який setoptваріант за замовчуванням ви використовуєте для цього (якщо такий є)?

Я зрозумів, що _-.поставив у якості підстановки. zstyle ':completion:*' matcher-list 'm:{a-zA-Z}={A-Za-z}' 'r:|[._-]=* r:|=*' 'l:|=* r:|=*' . Див stackoverflow.com/q/7906078/311660
ocodo

10

zshдозволяє редагувати багаторядкові команди (див. редактор рядків zsh ), bash не робить. Якщо ви спробуєте той же трюк ( Ctrl-p), bash отримує останню команду.


2
Bash робить це, принаймні, версії 4.2.37; він замінює нові рядки крапками з комою та дає вам єдиний рядок для редагування.
Кіт Томпсон

1
Ще не так приємно. (:
SilverWolf

8

Bash має особливість можливості відкривати порти за допомогою

/dev/tcp/host/port

або

/dev/udp/host/port

Однак він відключений у Debian, оскільки це сприймається як перешкода (якщо шлях насправді існує) і поза межами того, що повинна робити оболонка. Більше інформації [список розсилки debian]


5
zsh має вбудований ztcp, хоча він має більше можливостей, ніж bash's / dev / tcp, не має / dev / udp. Я хотів би скоріше використовувати сокат.
Стефан Шазелас

2

Який - посилений в zsh

whichКоманди в Баш тільки показує розташування команди.

У Zsh whichрозкриється визначення an alias, джерела для a functionта розташування команди.

Скажімо, у нас був псевдонім оболонки:

alias gg='git log'

У Баша, якби ми запитали: which ggрезультат буде недійсним

В Zsh: which ggдасть нам ...

gg: aliased to git log

Скажімо, у нас була функція оболонки:

hello() {
    echo "Hello World"
}

У Баша, якби ми запитали: which helloрезультат буде недійсним.

В Zsh: which helloдасть нам ...

hello() {
    echo "Hello World"
}

Bash забезпечує таку ж функціональність за допомогою команди type(вбудований). І лише до nitpick: whichце зовнішня команда, а не башти.
Torkel Bjørnson-Langen


0

zsh - повна оболонка

Є багато, прочитуючи zshcontrib(1)можна виявити дві версії autoload-able 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; наприклад, функції зчитування рядків та прив'язки клавіш можуть застосовуватися в усьому світі (як вони зберігаються ~/.inputrcі /etc/inputrc), якщо вони не перекриваються специфікою bash bind.

висновок

Мені особисто здається emacs(особливо з точки зору (нинішнього?) emacs-noxАромату) натхнення для виняткового програмного забезпечення, такого як, zshі tmuxзробило дуже хорошу роботу, будучи прикладом у такій реалізації; для людей, які оцінюють її вартість (до рівня не потребує / залежно від Xсервера). Оболонка Unix досить потужна, і її безперервність та послідовність є достатніми для належного робочого процесу та продуктивності (в цілому обчислювальних технологіях).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.