Стоит ли переходить на Zsh для повседневного использования? [закрыто]

192

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

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

Поможет ли zshдаже в небольшом количестве случаев облегчить мою жизнь? Или это только лучшая оболочка, если вы потратите время, чтобы узнать, почему она лучше? (Примеры тоже подойдут :))


@ Родни Амато и @ Вулкан Эйджер дают две веские причины, чтобы соответственно придерживаться bashи переключаться на zsh. Похоже, мне придется исследовать оба! Ну что ж:)

Есть ли кто-нибудь с мнением с обеих сторон аргумента?

Уилл Робертсон
источник
14
Поскольку zsh (почти) является надмножеством bash, вы можете начать с перехода на zsh и использовать его как bash. Тогда вы можете изучать драгоценные камни Zsh по одному.
orip
Если у вас есть небольшая настройка bash и вы часто используете оболочку в emacs, это не кажется тривиальным. Я опубликовал соответствующий вопрос: stackoverflow.com/questions/13326879/…
justingordon
Только что мне не нравится Zsh, что (по крайней мере , на Ubuntu) , вы должны настроить его самостоятельно в первый раз запустить его (вместо этого предоставляя некоторые здравомыслящие по умолчанию , которые вы можете позже возиться с). Если вы можете преодолеть это, Zsh является лучшим!
Зрайм

Ответы:

68

Для случайного использования вам, вероятно, лучше придерживаться bash и просто установить завершение bash.

Установить его довольно просто, возьмите bash-creation-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, и он должен показать вам опции cvs в списке завершений.

Родни Амато
источник
Я пробовал описанное выше, однако впоследствии, когда я запускаю bash, я получаю 4 ошибки «ожидается унарный оператор» и 4 ошибки «слишком много аргументов».
AnnanFay
12
Если вы используете homebrew на OSX, вы можете запустить brew install bash-completion.
Натан Вильяэскуса
3
Bash-Completion2 лучше! На OS X:brew tap homebrew/versions; brew install bash-completion2
Zearin
85

Лично я люблю зш.

Как правило, вы, вероятно, не заметите разницы между ним и bash, пока не захотите быстро сделать такие вещи, как рекурсивное сглаживание:

  • **/*.c например.

Или используйте псевдонимы суффиксов, чтобы связать определенные программы с различными суффиксами, чтобы вы могли «выполнить» их напрямую. Ниже псевдоним позволяет вам «запустить» источник C файл в командной строке, просто набрав ./my_program.c- который будет работать точно так , как если бы вы ввели vim ./my_program.c. (Сортировка, эквивалентная двойному щелчку по значку файла.)

  • alias -s c=vim

Или напечатайте имена файлов, измененных сегодня:

  • print *(e:age today now:)

Вы, вероятно, можете делать все это в bash, но мой опыт работы с zsh таков: если я хочу что-то сделать, я могу найти это в zsh-lovers . Мне также очень полезна книга « От Bash до Z-Shell ».

Игра с умом ошеломляюще большим количеством вариантов - тоже весело!

Matt
источник
1
Первые два примера здесь ничего не значат для меня (случайный пользователь bash, рассматривающий возможность перехода на zsh) - не могли бы вы уточнить, что означает «рекурсивное сглаживание», или что вы подразумеваете под «ассоциировать определенные проги с разными суффиксами»?
aaronsnoswell
5
@aaronsnoswell: «Рекурсивное сглаживание» означает поиск в подкаталоге и во всех его подкаталогах файлов, имена которых соответствуют определенному шаблону. Bash не делает этого по умолчанию; Вы findили locateискать рекурсивно. Но как только вы разрешаете другой программе выполнять поиск, вы теряете границы между именами (если вы не осторожны), а также получаете доступ к внутренним возможностям оболочки, и в основном приходится либо обходиться тем, что предоставляет другая программа, или передать его вывод через программу, подобную grep, awkили sed(все довольно сложные сами по себе).
cHao
6
В эти дни вы можете установить globstarопцию в bash, чтобы позволить рекурсивный поиск, как упоминалось выше. Я уверен, что это был не тот случай, когда этот ответ был написан.
cHao
С помощью glob_star_shortin zshвы можете теперь делать **.c, что интерпретируется как **/*.c.
PythonNut
Я использую zsh 5.3и получаю command not found: ageсprint *(e:age today now:)
Тимо
38

Переключиться на зш. Вы будете иметь доступ к:

  1. zmv: Вы можете сделать: zmv '(*).mp3' '$1.wma'для тысяч файлов.
  2. zcalc: Чрезвычайно удобный калькулятор, лучше чем bc.
  3. zparseopts: Одна строка для анализа произвольных сложных опций, заданных вашему скрипту.
  4. autopushd: Вы всегда можете сделать popdпосле, cdчтобы вернуться к предыдущему каталогу.
  5. Поддержка с плавающей точкой. Это нужно время от времени.
  6. Поддержка хэшей. Иногда они просто ключевая особенность.
Zearin
источник
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 был выпущен всего за несколько месяцев до этого ответа.
chepner
13

Если все, что вы хотите использовать для ZSH - это лучшее завершение, настройка довольно проста. Поместите это в ваш ~ / .zshrc:

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

Тем не менее, стоит проверить все другие замечательные возможности ZSH. Приведенный выше пример даст вам довольно простое приглашение с хорошим завершением. Если вы не хотите возиться с конфигурациями, но хотите посмотреть, что ZSH может сделать для вас, Google для "zshrc", и вы получите некоторые готовые к использованию конфигурации, чтобы начать.

jkramer
источник
3
Для каких вещей это добавит завершение? Я не люблю случайно добавлять вещи, не зная, что они делают.
mpen
6

У Zsh есть конфигурация консоли. Вы можете настроить его довольно быстро и легко, не прибегая к файлам конфигурации. Я не думаю, что вам потребуется много времени для его настройки, возможно, 10 секунд с использованием только значений по умолчанию, так что попробуйте и попробуйте.

Staale
источник
10
Как вы получаете доступ к этому "консоли GUI"?
mpen
Обычно это первое, что вы видите, когда загружаете zshбез каких-либо связанных файлов точек. Чтобы получить его вручную, попробуйтеautoload -U +X zsh-newuser-install; zsh-newuser-install -f
Адам Кац
3

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

IBM developerWorks имеет большие ресурсы по Zsh.

Я не использовал очень продвинутые функции, и до сих пор я не сталкивался с серьезными различиями, которые должны мешать кому-то из bash.

Некоторые примеры:

  • !? pattern <Tab> выполнит автозаполнение до последней команды в истории соответствия шаблону. Очень полезно.

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

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

Агнель Курьян
источник