Варто перейти на zsh для випадкового використання? [зачинено]


192

Оболонка за замовчуванням у Mac OS X - bashце я, як правило, із задоволенням використовую. Я просто сприймаю це як належне. Було б дуже приємно, якби він автоматично доповнив більше матеріалів , і я почув хороші речі zshз цього приводу. Але я насправді не маю бажання витрачати години, посміхаючись налаштуванням, щоб покращити використання мого командного рядка на невелику кількість, оскільки моє життя в командному рядку не так вже й погано.

(Наскільки я розумію, bashтакож можна налаштувати автоматичне завершення роботи більш розумно. Це налаштування, яке я не все так захоплюю.)

Чи zshполегшить мені життя навіть у невеликій кількості випадків? Або це лише краща оболонка, якщо ви вкладете час, щоб дізнатися, чому це краще? (Приклади теж непогано :))


@ Rodney Amato & @ Vulcan Eager дають дві вагомі причини, щоб відповідно дотримуватися bashі переходити на zsh. Схоже, мені доведеться розслідувати обох! що ж, добре:)

Чи є хтось із думкою з обох сторін аргументу?


14
Оскільки zsh є (майже) надгрупою bash, ви можете почати з переходу до zsh і використання його як bash. Тоді ви можете за раз вивчити zsh gems.
orip

Якщо у вас є трохи налаштування bash, і ви часто використовуєте оболонку всередині emacs, це не здається банальним. Я відправив пов'язаний з цим питання: stackoverflow.com/questions/13326879 / ...
justingordon

Тільки що мені не подобається Zsh, що (принаймні , на Ubuntu) , ви повинні налаштувати його самостійно в перший раз запустити його (замість цього надаючи деякі розсудливі по замовчуванням , які ви можете пізніше возитися с). Якщо ви можете перемогти це, zsh - найкраще!
zrajm

Відповіді:


68

Для випадкового використання вам, ймовірно, краще дотримуватися bash і просто встановлювати завершення bash.

Встановити його досить просто, захопіть bash-завершення-20060301.tar.gz з http://www.caliban.org/bash/index.shtml#completion і витягніть його за допомогою

tar -xzvf bash-completion-20060301.tar.gz

потім скопіюйте файл bash_completion / bash_completion в / etc з

sudo cp bash_completion/bash_completion /etc

який підкаже вам пароль. Напевно, ви захочете зробити каталог /etc/bash_completion.d для будь-яких додаткових скриптів завершення (наприклад, у мене є скрипт завершення програми git).

Після цього останній крок - переконатися, що у вашому домашньому каталозі є файл .bash_profile

if [ -f /etc/bash_completion ]; then
     . /etc/bash_completion 
fi

в ньому для завантаження файлу завершення під час входу.

Щоб перевірити його, просто відкрийте новий термінал і спробуйте заповнити його, і він повинен показати вам параметри cvs у списку доповнень.


Я намагався сказати вище, однак після цього, коли я починаю баш, я отримую 4 помилки "очікуваного одиночного оператора" та 4 "занадто багато аргументів".
AnnanFay

12
Якщо ви використовуєте домашню мову на OSX, ви можете запустити brew install bash-completion.
Натан Вілаескуса

3
Bash-Completion2 краще! В ОС X:brew tap homebrew/versions; brew install bash-completion2
Зерін

85

Особисто я люблю zsh.

Як правило, ви, мабуть, не помітите різниці між ним і баштом, поки не захочете швидко робити такі речі, як рекурсивний глобул:

  • **/*.c наприклад.

Або використовуйте псевдонікси суфікса, щоб пов’язати конкретні проги з різними суфіксами, щоб ви могли «виконувати» їх безпосередньо. Наведений нижче псевдонім дозволяє "запустити" вихідний файл С у відповідь на запит, просто ввівши його ./my_program.c- що буде працювати точно так, як якщо ви ввели vim ./my_program.c. (Сортувати еквівалент подвійному клацанню на піктограмі файлу.)

  • alias -s c=vim

Або надрукуйте назви файлів, змінених сьогодні:

  • print *(e:age today now:)

Ви, ймовірно, можете робити всі ці речі в баші, але мій досвід з zsh полягає в тому, що якщо є щось, що я хочу зробити, я, ймовірно, можу знайти це у любителів zsh . Я також вважаю книгу « Від Баша до Z-Shell » дуже корисною.

Граючи з розумом набридливо велика кількість варіантів, це теж гарна забава!


1
Перші два приклади тут для мене нічого не означають (випадковий користувач bash, який розглядає питання про перехід на zsh) - ви могли б детальніше пояснити, що означає "рекурсивний глобулінг", або що ви маєте на увазі під "пов'язувати конкретні проги з різними суфіксами"?
aaronsnoswell

5
@aaronsnoswell: "Рекурсивна глобалізація" означає пошук підкаталогу та всіх його підкаталогів для файлів, імена яких відповідають певній схемі. Bash не робить цього за замовчуванням; ви хочете findчи locateшукати рекурсивно. Але як тільки ви дозволяєте іншій програмі виконувати пошук, ви втрачаєте межі між іменами (якщо ви не обережні), а також отримуєте доступ до внутрішніх здібностей оболонки оболонки, і в основному вам доведеться або робити те, що надає інша програма, або передавати його вихід через таку програму, як grep, awkабо sed(всі вони досить складні).
cHao

6
Ці дні ви можете встановити globstarпараметр в bash, щоб дозволити рекурсивний пошук, як було сказано вище. Досить впевнений, що це було не так, коли ця відповідь була написана.
cHao

З glob_star_shortв zsh, тепер ви можете зробити **.c, що інтерпретується як **/*.c.
PythonNut

Я використовую zsh 5.3та отримую command not found: ageзprint *(e:age today now:)
Тимо

38

Перейти на zsh. Ви матимете доступ до:

  1. zmv: Ви можете зробити: zmv '(*).mp3' '$1.wma'для тисяч файлів.
  2. zcalc: Надзвичайно зручний калькулятор, краще, ніж bc.
  3. zparseopts: Один лайнер для розбору довільних складних варіантів, наданих вашому сценарію.
  4. autopushd: Ви завжди можете це зробити popdпісля cdповернення до попереднього каталогу.
  5. Підтримка з плаваючою комою. Це потрібно час від часу.
  6. Має підтримку. Іноді вони є лише ключовою особливістю.

17
Прикладом для zmv має бути zmv '(*). Mp3' '$ 1.wma'. Будь ласка, виправте це, таке недбале подання може бентежити та засмучувати недосвідченого.
qed

5
@TravisBear autoload zcalc; zcalc(хоча я сам просто набираю, pythonколи мені потрібен калькулятор).
Франциско

9
"autopushd: Ви завжди можете робити popd після cd, щоб повернутися до попереднього каталогу." Хіба не еквівалент цього просто CD -?
minhaz1

4
zmvі zcalcне доступні поза коробкою. Не ясно, що zmvце просто перейменування файлів; Я думав, ти, можливо, перетворював формат. Я не знаю, що означає навіть хеш-підтримка. Ця публікація здається, що вона лише "корисна" людям, які вже знають zsh.
mpen

1
@Mark У цьому випадку "хеш" є синонімом "асоціативного масиву". bash4 було звільнено лише за кілька місяців до цієї відповіді.
чепнер

13

Якщо все, що ви хочете використовувати ZSH для кращого завершення, конфігурація досить проста. Розмістіть це у своєму ~ / .zshrc:

autoload -U zutil      # [1]
autoload -U compinit   # [2]
autoload -U complist   # [3]
compinit

Однак варто перевірити всі інші чудові особливості ZSH. Наведений вище приклад дасть вам досить простий запит із гарним завершенням. Якщо ви не хочете поспішати з конфігураціями, але хочете побачити, що ZSH може зробити для вас, Google для "zshrc", і ви отримаєте кілька готових до використання конфігурацій для початку роботи.


3
Які речі додадуть це завершення? Мені не подобається випадково додавати речі, не знаючи, що це робить.
mpen

6

zsh має конфігурацію консолі gui. Ви можете налаштувати його досить швидко і легко, не маючи з собою файлів конфігурації. Я не думаю, що вам знадобиться багато часу, щоб налаштувати його, ймовірно, 10 секунд, лише використовуючи параметри за замовчуванням, тому продовжуйте і спробуйте це.


10
Як ви отримуєте доступ до цього "консольного гу"?
mpen

Зазвичай це перше, що ви бачите під час завантаження zshбез будь-яких пов’язаних точкових файлів. Щоб отримати його вручну, спробуйтеautoload -U +X zsh-newuser-install; zsh-newuser-install -f
Адам Кац

3

Стейл говорить про програму на зразок майстра (CUI), яка створює авторизований перший раз при запуску zsh. Просто дайте відповіді на деякі запитання, перегляньте / змініть параметри за замовчуванням та їх налаштовані для вас.

IBM developerWorks має великі ресурси на zsh.

Я не використовував дуже вдосконалених функцій, і до цих пір я не стикався з серйозними відмінностями, які повинні перешкоджати комусь, що прийшов з башу.

Деякі приклади:

  • !? Шаблон <Tab> автоматично заповнить останню команду в історії, що відповідає шаблону. Дуже корисний.

  • Ви можете налаштувати підказку на RHS. Одне використання - утримувати підказку з фіксованою шириною на лівій стороні, щоб усі команди добре вишикувалися, відображаючи pwd (або щось із змінною шириною) як підказку правого боку.

  • Ви можете перенаправити введення з декількох файлів (поки це не потрібно спробувати): cat <file1 <file2 <file3

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