Fish — Дружелюбная Интерактивная Оболочка

Хотите поделиться статьей? Пишите здесь.

Модератор: Модераторы

Авторская статья - это статья, написанная лично вами. Все остальное будет удаляться без предупреждения!
Статья должна соответствовать самой последней версии Ubuntu

Наша конституция Как задавать вопросы Как вставлять картинки на форум Как красиво оформить скриншот Экспериментируйте в виртуальной машине

Fish — Дружелюбная Интерактивная Оболочка

Сообщение Neonboy » 28 авг 2009, 21:55

Пролог

Как вам должно быть известно, командных оболочек на сегодняшний день существует множество: sh, ash, bash, dash, sash, tcsh, zsh, ksh и т.д.
В Ubuntu по умолчанию используется командная оболочка Bash, так как это один из самых распространённых шеллов. В этой статье мы кратко рассмотрим Friendly Interactive Shell - FISh (для удобства просто Fish). Почему именно её?

Плюсы. Особенности этой командной оболочки: интерактивный режим работы и дружественность пользователю. Подробная и доступная информация о командах делает их поиск значительно проще, чем в man-страницах оболочки Bash. И даже если Fish не сможет подключиться к X-серверу, для показа справки будет задействован браузер links.
Документация – не единственная дружелюбная функция в Fish. Здесь также используется подсветка синтаксиса: при вводе команды буквы выделяются красным цветом, и меняют его на зелёный, если имя команды написано правильно. Названия существующих папок подчёркиваются; есть вкладки и история. Fish использует специфические конструкции скриптов, которые проще для начинающих пользователей.

Минусы. Fish избавился от некоторых загадочных приемов в стиле Unix, но вам все же придется держать под рукой Bash, чтобы запускать системные скрипты. Хотя немногие новички используют в командной строке внутренние интерпретируемые команды Bash, такие как условные операторы (if, else, case) или операторы цикла (while, for). Не удивлюсь, если вы о них вообще не подозревали... Так что минус весьма шаткий.

И снова плюсы. Всё остальное будет идентично Bash, то есть вызов внешних утилит (ls, cat, sudo, apt-get и других) будет работать и в Fish. Автодополнение здесь лучше, чем в Bash, так как умеет дописывать опции. Пример:
Код: Выделить всё
~> sudo apt-get remove --pu[TAB]

Вуаля! Fish дополнит опцию (Bash же этого не делает):
Код: Выделить всё
~> sudo apt-get remove --purge


Скриншоты и пояснения

  1. При вводе команда выделяется красным цветом:
    #503
  2. Правильно написанная команда выделяется зелёным:
    #503
  3. Есть выделение кавычек и скобок:
    #503
  4. Вот пример неправильного ввода:
    #503
  5. Пример выделения каналов и grep:
    #503
    #503
  6. Некоторые опции и аргументы тоже выделяются разными цветами:
    #503
  7. Пример подчёркивания каталогов в пути и автодополнения по TAB:
    #503
На этом интерактивность не заканчивается, но мы-то знаем, что большинству новичков нужны именно графические эффекты. А подсказки и обучающая роль второстепенны, так как многие уже привыкли не задумываясь копировать команды из учебников. Я вас не разочарую, все цветовые выделения ещё и настраиваемы - будет красиво. Но об этом чуть позже.

Установка

Установить Fish вы можете в любимом пакетном менеджере Synaptic, а те, кто уже немного освоился в терминале, могут просто ввести команду: "sudo apt-get install fish" (не копируя её отсюда). Но всё же настоятельно рекомендую использовать последнюю версию этой командной оболочки, хотя бы и только ради красот.

О компиляции речи не пойдёт, просто возьмём и установим deb-пакет из разрабатываемой версии Ubuntu: http://packages.ubuntu.com/karmic/fish

Чтобы назначить Fish шеллом по умолчанию, выполните команду:
Код: Выделить всё
~$ sudo usermod -s /usr/bin/fish имя_пользователя

После чего перезапустите сессию или выполните полноценную перезагрузку системы.

Настройка цветов

  1. Цвета указываются с помощью команды:
    Код: Выделить всё
    set {переменная} {значение}
  2. Список возможных цветов: black, red, green, brown, yellow, blue, magenta, purple, cyan, white и normal (системный).
    Список можно получить командой:
    Код: Выделить всё
    set_color -c
  3. Возможные стили текста: bold (полужирный) и underline (подчёркнутый).
  4. Переменные, отвечающие за разные цветовые выделения:

    * fish_color_normal — цвет вывода по умолчанию (не трогайте его! задавайте этот цвет через опции gnome-terminal);
    * fish_color_command — цвет правильно введённой команды;
    * fish_color_quote — цвет для блока текста в кавычках;
    * fish_color_redirection — цвет для перенаправленного потока ввода/вывода;
    * fish_color_end — цвет для командных разделителей ("&", ";" и т.д.);
    * fish_color_error — цвет потенциальной ошибки;
    * fish_color_param — цвет для обычных параметров команды;
    * fish_color_comment — цвет для комментария кода;
    * fish_color_match — цвет для парных символов (кавычки, скобки);
    * fish_color_search_match — цвет совпадения шаблона при поиске в истории команд;
    * fish_color_operator — цвет для метасимволов ("*", "~" и т.д.);
    * fish_color_escape — цвет для escape последовательностей;
    * fish_color_cwd — цвет для текущего каталога пользователя.

    Все возможные переменные и их значения можно узнать по автодополнению. Введите:
    Код: Выделить всё
    set fish_color_[TAB]

    #503

    Также есть дополнительные переменные, отвечающие за выделение цветом совпадений при автодополнении:

    * fish_pager_color_prefix — цвет шаблона (префикса) в совпадении в списке возможных дополнений;
    * fish_pager_color_completion — цвет самого дополнения;
    * fish_pager_color_description — цвет описания;
    * fish_pager_color_progress — цвет прогресса.

Наглядные примеры

Вот как выглядят цвета по умолчанию:
#503

Изменим цвет правильно набранной команды на голубой, а шрифт сделаем полужирным (ключи "--bold" или "-o") и подчёркнутым (ключи "--underline" или "-u"):
Код: Выделить всё
set fish_color_command blue --bold -u

#503

Поменяем цвет и стиль опций на фиолетовый и полужирный:
Код: Выделить всё
set fish_color_param magenta --bold

#503

И сделаем шрифт в кавычках фиолетового цвета и подчёркнутым:
Код: Выделить всё
set fish_color_quote purple -u

#503

Теперь про дополнительные опции. К примеру, вы ввели ls и с помощью [TAB] решили узнать, какие дополнения есть (то есть lsmod, lspci, lsusb и т.д.).
Но для начала я задам описание коричневым, чтобы вы увидили отличия:
Код: Выделить всё
set fish_pager_color_description brown

#503

На скриншоте:
    "ls" — шаблон (префикс), выделен голубым цветом (fish_pager_color_prefix cyan);
    "attr", "mod" и т.д. — остаток (дополнение) после префикса, выделен белым цветом (fish_pager_color_completion white);
    справа в скобках находится описание, выделено коричневым цветом (fish_pager_color_description brown);
    progress здесь нету, но если весь список не будет вмещаться на одну страницу, он появится.

Заключение

Эта статья - чуть ли не единственное русскоязычное пособие по Fish!
И к сожалению, этого материала будет мало для тех, кто уже уверенно себя чувствует в командной строке, и кому не столько важны красоты, сколько "правописание". Возможно, совместными усилиями мы распишем все тонкости и нюансы. Переводите, тестируйте, делитесь опытом!

Для Fish есть англоязычный онлайн-мануал: http://fishshell.org/user_doc/index.html
Его также можно посмотреть и в самом Fish с помощью команды help.

----------
Автор: sKwa
Особая благодарность: zeroed, tester8, Чувак с гранатой
Ну а все "Спасибы" и проклятия - на мою голову: Neonboy
Аватара пользователя
Neonboy
Модератор
 
Сообщения: 182
Зарегистрирован: 12 янв 2009, 17:53
Откуда: Санкт-Петербург

Реклама

Re: Fish — Дружелюбная Интерактивная Оболочка

Сообщение Sega » 04 мар 2010, 10:51

при bash по умолчанию у меня был ~/.bashrc , а при fish какой файл необходимо редактировать (нужно добавить новый алиас)?
Sega
 
Сообщения: 9
Зарегистрирован: 15 авг 2009, 02:36


Вернуться в Авторские статьи

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1