Fish (Friendly interactive shell) — оболочка, предоставляющая удобный интерфейс командной строки и предназначенная для интерактивного использования.
Крупные изменения и исправления:
- Новая встроенная команда
path
для обработки путей. Например, для перечисления всех расширений на файлах в /usr/share/man с удалением крайнего расширения (обычно «.gz»), можно выполнить команду
path filter -f /usr/share/man** | path change-extension '' | path extension | path sort -u
-
Tab (или любая другая клавиша, к которой привязана
complete
) теперь выполняет раскрытие подстановочных знаков (wildcards) вместо дополнения, если в пути под курсором такие имеются. -
Добавлена поддержка перехвата и обработки сценариями (при помощи
function --on-signal
илиtrap
) сигналов SIGINT и SIGTERM.
Устаревшие и удаленные возможности
- Флаг
stderr-nocaret
, введенный в fish 3.0 и включенный по умолчанию в fish 3.1, был переведен в режим «только чтение», отключить его более невозможно. Этот флаг отвечает за отключение возможности использовать символ^
для перенаправления stderr, которая была сочтена устаревшей ввиду необходимости экранирования символа^
повсеместно и наличия рабочей альтернативы2>
. - Также были включены по умолчанию флаги
regex-easyesc
, отключающий лишний проход устранения экранирования вstring replace -r
, что позволяет, например, писатьstring replace -ra '([ab])' '\\\\$1' foobar
для экранирования символов «a» или «b» – без флага количество обратных косых черт возрастает до 8. Флаг был добавлен в fish 3.1.ampersand-nobg-in-token
, с которым символ&
считается частью токена, если находится в середине слова, а не запускает фоновый процесс. Напримерecho foo&bar
выведет «foo&bar» вместо запуска в фонеecho foo
и выполнения командыbar
. Флаг был добавлен в fish 3.4.
Для отключения этих флагов достаточно добавить no-regex-easyesc
или no-ampersand-nobg-in-token
в $fish_features
и перезапустить fish
:
set -Ua fish_features no-regex-easyesc
Как и stderr-nocaret
, эти флаги будут переведены в режим «только чтение» в одном из последующих релизов.
Исправления
- Пустые переменные цвета теперь интерпретируются как указание использовать цвет, указанный в переменной цвета для более общего типа, а не «normal» цвет (обычно белый в темном терминале). Так, команды
set -g fish_color_command blue
set -g fish_color_keyword
ранее приводили к использованию цвета «normal» для ключевых слов – теперь же ключевые слова окажутся голубого цвета.
eval
теперь является зарезервированным ключевым словом, недоступным для использования в качестве названия функции. Это изменение дополняет схожие изменения, выполненные ранее дляset
иread
.- Командная строка git в информативном (informative) режиме не будет выполнять подсчет неотслеживаемых файлов в репозитории по причине низкой производительности. Включить подсчет можно при помощи переменной
$__fish_git_prompt_showuntrackedfiles
или отдельно для каждого репозитория в его файле конфигурации git, установив значениеbash.showuntrackedfiles
вtrue
Улучшение языка сценариев
- В кавычках, на подстановку значения переменной более не влияет следующая непосредственно за ней подстановка команды.
- Исправлена регрессия обработки подстановок команд, следующих сразу за экранированным символом
$
(например,echo \$(echo)
). - Команда
math
теперь распознает символ_
в числах как визуальный разделитель:math 5 + 2_123_252
. math min
иmath max
поддерживают обработку произвольного числа аргументов.- Команда
read
теперь выполняется быстрее, если запущена как последний процесс в конвеере. - Некоторые функции, поставляемые в комплекте
fish
, выводили ошибки на стандартный вывод – теперь ошибки выводятся на stderr, как и должны. jobs
выводит использование CPU в процентах.
Улучшения привязок
Alt+S
вставляетdoas
на системах безsudo
.- Специальная функция
kill-whole-line
вырезает перенос строки, предшествующий последней строке, что исправляет поведениеdd
в vi-режиме, когда курсор находится на последней строке. - Новая специальная функция
kill-inner-line
вырезает строку, сохраняя перенос строки, что исправляет поведениеcc
в vi-режиме.
Дополнения команд
Дополнения команд были добавлены для:
- archlinux-java
- apk
- brightnessctl
- efibootmgr
- fastboot
- optimus-manager
- rclone
- sops
- tuned-adm
- wg-quick
Команде complete
теперь можно передавать несколько параметров --condition
, дополнение будет выполняться только при выполнении всех указанных условий – это должно улучшить работу кэширования.
>>> Подробности