Выпуск командной оболочки fish 3.0

Подготовлен релиз интерактивной командной оболочки fish 3.0.0 (friendly interactive shell), развивающейся как более дружественная пользователю альтернатива bash и zsh. Fish поддерживает такие возможности как подсветка синтаксиса с автоматическим выявлением ошибок ввода, предложение возможных вариантов ввода на основе истории прошлых операций, автодополнение ввода опций и команд с использованием их описания в man-руководствах, комфортная работа из коробки без необходимости дополнительной настройки, упрощённый язык написания сценариев, поддержка буфера обмена X11, удобные средства поиска в истории выполненных операций. Код проекта распространяется под лицензией GPLv2. Готовые пакеты сформированы для Ubuntu, Debian, Fedora, openSUSE и RHEL.

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

  • Прекращена возможность определения идентификаторов процессов и работ с использованием оператора «%», оставлена только поддержка выражения «%self», позволяющего определить текущий PID;
  • Прекращена поддержка синтаксиса «set x[1] x[2] a b» для установки разом нескольких элементов массива;
  • Обращение к массиву с нулевым индексом («array[0] «) теперь приводит к ошибке (элементы массивов в fish начинаются с 1).
  • Переменные в циклах «for» больше не являются локальными для блока;
  • Переменные, установленные в условных выражениях «if» и «while» теперь доступны вне блока;
  • Во встроенной команде math прекращена поддержка логических выражений (для них следует использовать команду test);
  • В команде «cd» прекращена поддержка перехода по символическим ссылкам;
  • Указание аргументов после выражения «end» теперь не игнорируется, а приводит к выводу ошибки;
  • Зарезервированы и больше не могут использоваться в именах функций ключевые слова «argparse», «read», «set», «status», «test» и «[«;
  • Прекращена разбивка переменных окружения в элементы массива при наличии разделителя, за исключением переменных, заканчивающихся на слово «PATH»;
  • Переведены в разряд устаревших (в будущем будут удалены) такие возможности как переменная IFS для команды read (следует использовать опцию «—delimiter»), режим «—on-process-exit» (замена «—on-event fish_exit»), переменная $_ (замена «status current-command»), использование знака «^» для перенаправления stderr и маски «?».

Среди добавленных улучшений:

  • Добавлен механизм флагов, определяющих уровень поддерживаемой функциональности и позволяющий сохранить работоспособность скриптов в условиях прекращения поддержки определённых возможностей и внесения нарушающих совместимость изменений. Для определения используемого уровня функциональность предложены опция «—features» и переменная «fish_features», через которые можно указать необходимую версию fish. Например, если скрипт завязан на функциональность fish 3.0 можно указать «—features 3.0»;
  • Добавлены логически операторы «», «||» и «!», которые можно использовать вместо «and», «or» и «not»;
  • Переменные теперь можно использовать как команды (например, при запуске теперь можно указывать «$HOME/bin/mvim» без необходимости применения eval);
  • Добавлена опция «—private» для запуска оболочки в приватном режиме , в котором связанная с сеансом активность не сохраняется в логах и истории введённых команд;
  • Добавлена команда «wait» для ожидания завершения фоновых процессов;
  • Команда «math» теперь встроена в fish (ранее была реализована в виде обвязки над bc). По умолчанию все вычисления производятся в дробном представлении;
  • Добавлена зарезервированная переменная $hostname, отражающая имя текущего хоста;
  • Добавлены переменные $fish_pid и $last_pid, предложенные в качестве замены %self и %last;
  • Команда «string» теперь не останавливает разбор строки после нулевого символа. Для работы со строками с разделителем в виде нулевого символа добавлены отдельные подкоманды split0 и join0. Добавлена опция «—no-empty» для исключения пустых сток при выводе. В команду «string escape» добавлена опция «—style regex» для экранирования с применением регулярных выражений;
  • Предложен большой набор новых опций для различных команд, в том числе «alias —save», «bind —silent», «complete —keep-order», «funced —save», «functions —handlers», «history search —reverse», «jobs —quiet», «read —delimiter», «set —append», «set —prepend», «set —show»;
  • Добавлена команда xclip для взаимодействия с буфером обмена;
  • В интерактивном режиме завершение строки символом «|» теперь приводит к продолжению работы на следующей строке (например, «echo foo |»);
  • Значительно расширены возможности системы автодополнения ввода и управления многостраничной прокруткой (pager);
  • Существенно повышена производительность установки переменных, запуска функций, команды abbr, раскрытия путей (globs), чтения строк из стандартного ввода, выборки из истории (особенно ускорен вызов $history[1] для получения последней запущенной команды).

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.