Если командная строка Bash всё ещё выглядит как в 2005 году, без подсветки синтаксиса, нечёткого поиска по истории и только с мигающим курсором, утилита Flyline модернизирует её примерно за 30 секунд.

Readline сопровождает Bash на протяжении многих лет, и идея его замены обычно даже не приходит в голову. Всё работало, поэтому вопрос замены не поднимался.

Всё изменилось, когда коллега продемонстрировал свой терминал во время совместного сеанса. В его оболочке ошибочный конвейер подсвечивался красным ещё до нажатия Enter, а нечёткий поиск по истории команд выполнялся так же легко, как поиск сообщений в Slack.

Возник закономерный вопрос, что же он использует. Оказалось, что это Flyline — легковесный плагин на Rust.

В тот же вечер утилита была установлена на основной рабочий компьютер с Ubuntu, а на следующее утро на тестовый сервер с Rocky Linux. Обе установки потребовали всего пару команд и не требовали sudo.

Больше всего поражает, сколько инструментов становятся ненужными. Возможности нечёткого поиска по истории и улучшения подсказки уже встроены в Flyline, а благодаря тому, что он выполняется непосредственно внутри процесса Bash, не запуская внешних программ при каждом нажатии клавиши, всё ощущается быстрым и отзывчивым.

Что делает Flyline

Flyline представляет собой загружаемую встроенную команду Bash, написанную на Rust, которая заменяет GNU Readline, библиотеку, десятилетиями отвечавшую за редактирование командной строки в Bash.

Readline предоставляет базовые возможности: перемещение курсора, вызов истории команд и автодополнение по Tab. Flyline делает всё то же самое, но добавляет современные функции, такие как подсветка синтаксиса по мере ввода, отмена и повтор действий, поддержка мыши для кликов и выделения текста, всплывающие подсказки, анимированный курсор и нечёткий поиск по истории с помощью Ctrl+R, аналогичный тому, что предлагает fzf.

Также в составе имеется Режим агента, позволяющий описать желаемое действие на естественном английском языке. Подключённый ИИ-агент предложит соответствующую команду Bash. Это особенно удобно, когда вы знаете, чего хотите добиться, но не помните точную команду или её параметры. Подробнее об этой возможности мы расскажем далее в статье.

Скорость работы тоже впечатляет. Поскольку Flyline выполняется непосредственно в процессе Bash, не полагаясь на внешние скрипты-обёртки и не запуская отдельных программ, отклик остаётся мгновенным. Он построен с использованием ratatui, библиотеки Rust для создания пользовательских интерфейсов в терминале, что придаёт Flyline более плавный и современный вид по сравнению с традиционной командной строкой Bash.

Предварительные требования

Перед установкой Flyline убедитесь, что у вас есть:

  • Система Linux с Bash 4.4 или новее (проверьте командой bash --version).

  • Установленный curl, так как установочный скрипт загружает необходимые файлы.

  • Права sudo или root для стандартной установки не требуются.

  • Опционально: Rust и Cargo, если вы хотите собрать Flyline из исходного кода вместо использования установочного скрипта.

Примечание: Flyline устанавливается как пользовательская встроенная команда Bash, а не как системный пакет. Стандартная установка не требует прав root и размещает файлы только в вашем домашнем каталоге, поэтому ничего за пределами учётной записи не изменяется.

Шаг 1: Установка Flyline с помощью официального скрипта

Самый простой способ установить Flyline — воспользоваться официальным установочным скриптом, который автоматически загружает подходящий бинарный файл для вашей системы и обновляет ~/.bashrc, чтобы Flyline загружался при каждом запуске Bash.

curl -sSfL https://raw.githubusercontent.com/HalFrgrd/flyline/master/install.sh | sh

Вот что делает каждая часть команды:

  • curl загружает установочный скрипт с GitHub.

  • -s выполняет curl в тихом режиме, скрывая индикатор выполнения.

  • -S отображает сообщение об ошибке, если загрузка не удалась, даже в тихом режиме.

  • -f заставляет curl остановиться, если сервер возвращает ошибку, а не загружает страницу с ошибкой.

  • -L следует по любым перенаправлениям к конечному расположению файла.

  • | sh передаёт загруженный скрипт непосредственно в оболочку для выполнения.

Чтобы сразу начать использовать Flyline, откройте новый терминал или перезагрузите конфигурацию Bash:

source ~/.bashrc

После перезагрузки оболочки Flyline автоматически заменяет стандартный интерфейс Readline.

Flyline: современное редактирование в Bash
Flyline: современное редактирование в Bash

Примечание: Если вы используете macOS вместо Linux, вам сначала потребуется более новая версия Bash с поддержкой пользовательских встроенных команд, поскольку версия, входящая в состав macOS, слишком старая. Её можно установить с помощью Homebrew перед запуском установщика Flyline. Это требование не относится к современным дистрибутивам Linux.

Шаг 2: Проверка установки и запуск интерактивного руководства

После перезапуска терминала или перезагрузки ~/.bashrc убедитесь, что Flyline активен, запустив встроенное интерактивное руководство:

flyline run-tutorial
Интерактивное руководство Flyline
Интерактивное руководство Flyline

Руководство — самый быстрый способ познакомиться с возможностями Flyline. Оно пошагово демонстрирует подсветку синтаксиса, нечёткий поиск по истории, отмену/повтор, автодополнение по Tab, встроенные подсказки и поддержку мыши, позволяя опробовать каждую функцию прямо в терминале.

Если вы собрали Flyline из исходного кода вместо использования установочного скрипта, потребуется вручную загрузить встроенную команду перед использованием.

На Ubuntu, Debian, Rocky Linux, RHEL и большинстве других дистрибутивов Linux выполните:

enable -f ~/.local/lib/flyline/libflyline.so flyline

Если вы компилировали Flyline из исходного кода, также потребуется установленный инструментарий Rust.

sudo apt install cargo rustc   [On Ubuntu/Debian]
sudo dnf install cargo rust    [On RHEL/Rocky Linux]

В этом случае sudo требуется, потому что компилятор Rust и сопутствующие средства разработки устанавливаются системно. Для самой стандартной установки Flyline sudo не нужен.

Шаг 3: Нечёткий поиск по истории и поддержка мыши

Одна из самых полезных функций Flyline — улучшенный поиск по истории команд. Вместо того чтобы прокручивать старые команды или искать точное совпадение, можно выполнять поиск по нескольким ключевым словам.

Нажмите Ctrl+R и начните вводить часть команды, которую выполняли ранее:

Ctrl+R
> docker ps stopped
Flyline – поиск по истории команд
Flyline – поиск по истории команд

Обратите внимание: поиск находит подходящие команды, даже если введённые слова расположены не в том же порядке, что и в исходной команде. Нечёткое сопоставление значительно упрощает поиск длинных или сложных команд без необходимости помнить точный синтаксис.

При обычном вводе команд Flyline также показывает встроенные подсказки на основе истории. Если предложенный вариант вас устраивает, переместите курсор в конец строки и нажмите стрелку вправо или End, чтобы принять его.

Flyline также включает поддержку мыши по умолчанию. Вы можете щёлкнуть в любом месте текущей строки, чтобы переместить курсор, или выделять текст перетаскиванием при редактировании команды.

Шаг 4: Настройка приглашения

Flyline работает с вашим существующим приглашением PS1, поэтому, если вы уже настроили свою командную строку Bash, ничего менять не нужно. Однако он также добавляет поддержку RPS1 (правостороннего приглашения) и PS1_FILL, который заполняет пространство между левым и правым приглашениями.

Например, можно отобразить обычное приглашение слева, а текущее время — справа:

echo 'PS1="\\u@\\h:\\w\\$ "' >> ~/.bashrc
echo 'RPS1="\\t"' >> ~/.bashrc
echo "PS1_FILL='-'" >> ~/.bashrc
source ~/.bashrc

Ваше приглашение будет выглядеть примерно так:

ravi@tecmint:~/projects -------------------- 14:32:07
$

Отметка времени справа обновляется автоматически при перерисовке, поэтому всегда показывает актуальное время.

Если вы предпочитаете нестандартный формат времени, можете использовать \\D{format} вместо \\t. Flyline поддерживает форматные строки Chrono, позволяя отображать время в различных вариантах, включая миллисекунды.

Например:

RPS1='\\D{%H:%M:%S.%3f}'

Такой формат показывает время в виде часы:минуты:секунды.миллисекунды.

Если вы хотите глубже изучить написание собственного окружения Bash с нуля, курс Bash Scripting for Beginners на Pro TecMint охватывает эту тему от начала до конца.

Настройка режима агента (опционально)

Одной из выдающихся особенностей Flyline является Режим агента, позволяющий описать желаемое действие на простом английском языке и получить от ИИ-ассистента соответствующую команду Bash.

Режим агента не включён по умолчанию, поэтому его нужно настроить с помощью команды flyline set-agent-mode, указав префикс-триггер и инструмент командной строки ИИ.

flyline set-agent-mode \
  --system-prompt "Be concise. Answer with a JSON array of at most 3 items with objects containing: command and description. Command will be a Bash command." \
  --trigger-prefix 'ai: ' \
  --command 'claude --print'

Вот что делает каждая опция:

  • --system-prompt сообщает ИИ, как форматировать ответ. В данном примере возвращается JSON-массив, содержащий команды Bash и короткие описания, чтобы Flyline мог их корректно отобразить.

  • --trigger-prefix 'ai: ' определяет текст, после которого Flyline отправит ввод ИИ. Вы можете заменить ai: на любой другой префикс.

  • --command 'claude --print' указывает CLI-клиент ИИ, который будет использоваться. В этом примере используется Claude Code с вашей существующей аутентификацией, поэтому дополнительный API-ключ не требуется.

При успешном выполнении вы увидите:

Agent mode configured. Trigger prefix: 'ai: '

Чтобы не настраивать Режим агента при каждом открытии терминала, добавьте ту же команду flyline set-agent-mode в ~/.bashrc.

После настройки начните строку с префикса-триггера, а затем введите запрос:

ai: list files older than three days

Если вас интересует генерация команд с помощью ИИ в терминале, курс Claude Code for Linux Sysadmins на Pro TecMint описывает построение рабочих процессов с использованием ИИ для реальных задач системного администрирования.

Отключение Flyline

Если вы захотите вернуться к стандартному интерфейсу Readline, удалять Flyline необязательно. Можно просто отключить его для текущего сеанса Bash.

enable -d flyline

Это повлияет только на текущий сеанс терминала. Если закрыть терминал и открыть новый, Flyline снова загрузится благодаря строке enable -f, добавленной в ~/.bashrc при установке.

Для полного удаления Flyline удалите строку enable -f из ~/.bashrc и саму библиотеку Flyline из каталога установки, обычно ~/.local/lib/flyline/.

Заключение

Flyline придаёт командной строке Bash более современный вид, не меняя принципов работы самого Bash. Вы получаете подсветку синтаксиса, нечёткий поиск по истории, поддержку мыши, встроенные подсказки и опциональную генерацию команд с помощью ИИ, причём без прав root и сложной настройки.

Если вам нужен простой способ сделать Bash удобнее и приятнее в использовании, Flyline определённо стоит попробовать. Поработайте с ним несколько дней в привычном рабочем процессе, и вы быстро поймёте, какие функции станут частью вашей ежедневной рутины.