Как вам должно быть известно, командных оболочек на сегодняшний день существует множество: 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
Скриншоты и пояснения
- При вводе команда выделяется красным цветом:
#503 - Правильно написанная команда выделяется зелёным:
#503 - Есть выделение кавычек и скобок:
#503 - Вот пример неправильного ввода:
#503 - Пример выделения каналов и grep:
#503
#503 - Некоторые опции и аргументы тоже выделяются разными цветами:
#503 - Пример подчёркивания каталогов в пути и автодополнения по TAB:
#503
Установка
Установить Fish вы можете в любимом пакетном менеджере Synaptic, а те, кто уже немного освоился в терминале, могут просто ввести команду: "sudo apt-get install fish" (не копируя её отсюда). Но всё же настоятельно рекомендую использовать последнюю версию этой командной оболочки, хотя бы и только ради красот.
О компиляции речи не пойдёт, просто возьмём и установим deb-пакет из разрабатываемой версии Ubuntu: http://packages.ubuntu.com/karmic/fish
Чтобы назначить Fish шеллом по умолчанию, выполните команду:
- Код: Выделить всё
~$ sudo usermod -s /usr/bin/fish имя_пользователя
После чего перезапустите сессию или выполните полноценную перезагрузку системы.
Настройка цветов
- Цвета указываются с помощью команды:
- Код: Выделить всё
set {переменная} {значение}
- Список возможных цветов: black, red, green, brown, yellow, blue, magenta, purple, cyan, white и normal (системный).
Список можно получить командой:- Код: Выделить всё
set_color -c
- Возможные стили текста: bold (полужирный) и underline (подчёркнутый).
- Переменные, отвечающие за разные цветовые выделения:
* 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
