Date Category IT Tags Fish / Zsh Lang en

Я использовал Fish shell более 2х лет в качестве своего основного shell. Я не собираюсь его ругать или поливать грязью - Fish отлично работает из коробки, именно он познакомил меня с интерактивными автодополнением, и его практически не нужно настраивать.

Но теперь, после 2х лет активного использования, я сменил его на zsh.

Главная причина переезда на zsh проста - Fish не POSIX-совместимый. И несмотря на то, что многие повторяют "Зачем тебе POSIX-совместимость если ты не пишешь скриптов на Fish?", на самом деле это отсутствие POSIX-совместимости проявляется часто и очень раздражающе.

Например, хочу я включить отладку в какой-то программе. Инструкция на сайте говорит мне - запускай с установленной переменной DEBUG, напимер так: DEBUG=1 some-program --some-args.

Будь мой shell POSIX-совместимым, я бы спокойно приступил к дебагу, но с Fish мне всегда приходится держать в голове все эти маленькие POSIX-несовместимости. Для данного примера мне придется вспомнить, что в Fish я вынужден использовать команду env DEBUG=1 some-program --some-args, или вообще городить такие монструозные конструкции: begin; set -lx DEBUG 1; some-program --some-args; end.

А это ведь простой однострочный пример. В реальности таких несовместимостей будет больше, к примеру объединение команд в последовательность (one && two придется писать как one; and two), перенаправление stderr (используем ^), или использованием вывода других команд (backtick не работает).

А еще есть проблемы со всеми утилитами, которые рассчитывают на POSIX shell для управления переменными окружениями, к примеру boot2docker для выставления DOCKER_HOST или ssh-agent для настройки SSH_AUTH_SOCKET.

При этом все эти проблемы крошечные, их легко решить, просто со временем они меня достали.

Оказалось гораздо проще один раз настроить Zsh и забыть про все эти правила трансляции из POSIX-shell в Fish-shell, чем регулярно мучиться с этими мелкими проблемами.

После непродолжительных экспериментов я остановился на отличном фреймворке конфигураций для zsh prezto включил плагины autosuggestions, syntax-highlighting и history-substring-search, и теперь наслаждаюсь всеми ништяками Fish с POSIX-совместимым zsh.

Начиная с этого поста все публикации будут на английском. Если перевод на русский не будет востребован (не будет комментариев), то от него придется отказаться.


Comments

comments powered by Disqus