- PVSM.RU - https://www.pvsm.ru -

Обзор Friendly interactive shell (fish) и почему она лучше bash

Недавно админ в компании, в которой я работаю, посоветовал попробовать заменить стандартный bash на zsh или fish. Я начал искать информацию по обоим оболочкам, перед тем как попробовать их.

Тут следует пояснить, почему мне не нравится bash. Основное неудобство для меня — это bash script. Когда надо что-то простенькое реализовать, то синтаксис довольно понятен. Но как только тебе надо сделать какую-то сложную логику (хотя бы несколько команд подряд), становится очень сложно разобраться в коде, особенно когда смотришь чужой скрипт. Следующее, что меня расстраивало — это сложности в автокомплите и поиске команд. Конечно, спасало сочетание Ctrl + r, но хотелось, чтобы такой поиск был по умолчанию. Ну и оставалось чисто индивидуальное недовольство настройкой цветов в баше. Единственное, что мне удалось настроить, это подсказка, и то без онлайн генератора PS1 мне было бы очень сложно и это сделать.

Недовольство всеми этими недостатками медленно зрело во мне на протяжении последних 2 лет (приблизительно столько активно пользуюсь командной строкой). Я решил поискать альтернативы. Открыв «Хабр» (основной источник полезной информации для меня) я начал изучать статьи по обоим оболочкам. Первое, что бросилось в глаза — это всего одна короткая статья про fish [1]. Тогда как про zsh было вполне достаточно информации. Изучив поверхностно последнюю оболочку, я понял, что она еще сложнее в усвоении, чем bash. Конечно, все что угодно можно усвоить и использовать по полной программе, но я не сисадмин, а веб-разработчик на Python и мне нужен удобный инструмент, который бы не отвлекал от основной работы, легко и понятно настраивался и конечно же был приятен глазу.

image

Если вас заинтересовала оболочка fish, прошу под кат.

Единственный рускоязычный мануал по fish я нашел тут [2].

Краткий список плюсов

  • Интерактивный режим работы и дружественность пользователю;
  • Подробная и доступная информация о командах делает их поиск значительно проще, чем в man-страницах оболочки bash. И даже если fish не сможет подключиться к X-серверу, для показа справки будет задействован браузер links;
  • Подсветка синтаксиса: при вводе команды буквы выделяются красным цветом, и меняют его на зелёный, если имя команды написано правильно;
  • Названия существующих папок подчёркиваются;
  • Eсть вкладки и история;
  • Fish использует специфические конструкции скриптов, которые проще для начинающих пользователей;
  • Автодополнение здесь лучше, чем в bash, так как fish умеет дописывать опции;
  • Легко читаемый вид функций;
  • Легко настраивать в браузере используя команду fish_config.

Это только основные достоинства fish.

Так же хотелось бы написать и про различия между этими двумя оболочками

  • Алиасы заменены и дополнены функциями, что делает fish очень гибкой и легко настраиваемой, в отличие от bash;
  • Файлы конфигурации располагаются в папке .config/fish и разделяются на типы. Например функция, отвечающая за отображение подсказки находится в файле ~/.config/fish/functions/fish_prompt.fish, свои функции можно писать отдельными файлами в папке functions или все в одном файле ~/.config/fish/config.fish (я использую последний вариант, так как проще переносить один файл, например на рабочую машину).

Установка

Ubuntu like дистрибутивы:

sudo apt-get install fish

Перед этим можно добавить ppa для версии 2.1.1(в репе версия 2.0.0):

sudo apt-add-repository ppa:fish-shell/release-2
sudo apt-get update

Я также использую Arch, так что приведу команду и для него:

sudo pacman -S fish

Отличия в подсказках

Меня приятно удивило отображение подсказки в fish. Со скриншота выше видно, что помимо отображения времени в подсказке отображается полный путь к текущей директории, только сокращенный до первых букв. Это чрезвычайно удобно, не надо постоянно вызывать pwd. Также очень приятная особенность состоит в том, что fish можно настроить так, что если в текущей директории есть папка .git, то в подсказке отображается активный branch (committee на скриншоте). Что самое приятное, так настроить подсказку можно всего лишь выбрав в fish_config во вкладке prompt, Classic + git и все. Я лишь добавил к этой функции отображение времени и цвета по своему вкусу.

Полезные ссылки

Оф. сайт [3]
Arch wiki [4] — очень подробно про настройку fish
Рус. ман [2]
config.fish [5]
fish_prompt.fish [6]

Просьба ошибки присылать в личку, постараюсь оперативно исправлять.

Если у вас есть вопросы — задайте в комментариях. С радостью отвечу.

Автор: Crandel

Источник [7]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/bash/80718

Ссылки в тексте:

[1] fish: http://habrahabr.ru/post/150096/

[2] тут: http://ubuntologia.ru/forum/viewtopic.php?t=1364&f=93

[3] Оф. сайт: http://fishshell.com/

[4] Arch wiki: https://wiki.archlinux.org/index.php/Fish

[5] config.fish: https://gist.github.com/Crandel/006b855261f7bfc43287

[6] fish_prompt.fish: https://gist.github.com/Crandel/131ab82864a18831093c

[7] Источник: http://habrahabr.ru/post/248881/