LINUX.ORG.RU

Fish Shell 4.0

 , ,

Fish Shell 4.0

0

3

Командная оболочка Fish Shell, популярная среди пользователей терминалов, обновилась до версии 4.0, которая принесла значительные изменения и улучшения.

Основное новшество заключается в том, что Fish Shell теперь полностью переписана на языке программирования Rust. Однако для обычных пользователей этот переход будет практически незаметен: команды, настройки и типичные взаимодействия останутся прежними.

Другие значимые изменения изменения

  • Новая система привязки клавиш. Fish Shell 4.0 представляет обновленную систему привязки клавиш и более глубокую совместимость с терминалами. Теперь можно заменить неинтуитивные esc-последовательности на более человекочитаемые команды, такие как bind ctrl-right. Благодаря поддержке протокола клавиатуры Kitty, Fish может различать последовательности управления, которые ранее казались идентичными, например bind ctrl-i, bind ctrl-I и bind tab.
  • Интеграция с возможностями терминала. Fish теперь автоматически использует последовательности OSC 133 для подсказок и вывода команд, что способствует более гладкой синхронизации с различными терминалами, которые ранее полагались на дополнительные скрипты интеграции оболочки.
  • Улучшенная обработка длинных команд. Оболочка теперь более аккуратно обрабатывает длинные командные строки, прокручивая их вместо неправильного отображения. Любые изменения, вызванные привязками командной строки, сразу видны, что обеспечивает более интуитивный опыт работы.
  • История команд. Пейджер истории команд, впервые представленный в Fish 3.6, был доработан. Теперь можно использовать синтаксис glob для более точной фильтрации записей истории, например, поиск по * glob syntax - git*HEAD выдаст всё, где есть git и HEAD именно в таком порядке.
  • Новая тема по умолчанию. В новой версии тема по умолчанию была слегка изменена: команды теперь отображаются в «нормальном» цвете терминала вместо трудночитаемого «синего». Существующие пользователи сохранят свои текущие настройки, если не перезагрузят тему вручную через fish_config.
  • Самоустанавливаемые сборки. Новая функция самоустанавливаемых сборок может стать настоящим прорывом для пользователей, часто работающих через SSH на серверах без административных привилегий. После компиляции Fish можно запустить один самодостаточный бинарный файл, который извлекает все необходимое — функции, страницы руководства и даже веб-инструмент настройки — в домашний каталог.
  • Исключение команд из истории. Наконец появилась долгожданная функция, позволяющая исключать определенные команды из истории. Определив пользовательскую функцию fish_should_add_to_history, можно точно решить, какие команды будут сохранены.
  • Улучшения для скриптинга:
    • string match теперь поддерживает опцию --max-matches, позволяющую ограничить количество обрабатываемых совпадений;
    • циклы for больше не будут запоминать локальные переменные из предыдущей итерации;
    • set получает опцию --no-event для подавления событий изменения переменных;
    • time начинает измерение раньше, захватывая продолжительность любых подстановок команд до их выполнения;
    • complete --erase полностью отключает автозагрузку завершений для указанных команд.

>>> Полный список изменений и релиз на GitHub

>>> Подробности в блоге fishshell.com

★★★★★

Проверено: dataman ()
Последнее исправление: CrX (всего исправлений: 5)
Ответ на: комментарий от dataman

А, ну ок тогда. В смысле, ничего хорошего, конечно же, и раст не нужен — но у меня хоть с памятью всё нормально.

Smacker ★★★★★
()

не нужно, есть yash, posix совместимый, подсказки на основе истории, автодополнение путей, (некоторых) комманд. работает из коробки

jfs
()
Ответ на: комментарий от Alphaer

Да Щас!

gleb@macpro ~ % uname -a
Darwin macpro 24.3.0 Darwin Kernel Version 24.3.0: Thu Jan  2 20:24:16 PST 2025; root:xnu-11215.81.4~3/RELEASE_ARM64_T6000 arm64
gleb@macpro ~ % sw_vers 
ProductName:		macOS
ProductVersion:		15.3.1
BuildVersion:		24D70
gleb@macpro ~ % bash --version 
GNU bash, version 3.2.57(1)-release (arm64-apple-darwin24)
Copyright (C) 2007 Free Software Foundation, Inc.
gleb@macpro ~ % 
gns ★★★★★
()
Ответ на: комментарий от Alphaer

Я с homebrew живу. Тут и так зоопарк, вот мне не хватало еще одного зверинца. :) Z-shell хватает даже без OMyZsh.

gns ★★★★★
()

Альтернатив этому Fish плагину для Bash не нашел (есть только для zsh):
$ fisher install rmartine-ias/jq-fish-plugin

удобно интерактивно составлять jq запросы.

Я еще не встречал человека, который бы не крыл нехорошими словами синтаксис jq, но тем не менее, всем приходится его использовать.

Можно, конечно, написать Bash функцию с fzf, но все равно это не то.

Megalol
()
Последнее исправление: Megalol (всего исправлений: 5)

Fish Shell 4.0 на Rust? Ну, хоть что-то поменяли, а то уже скучно было. Главное, чтобы команды не сломали, а то придется обратно на Bash переходить.

Girts2010
()
Ответ на: комментарий от Girts2010

Сомнительная замена, да еще и началось с того, что shell получился «кривой и падает» :(

gns ★★★★★
()
Ответ на: комментарий от jfs

не нужно, есть yash, posix совместимый, подсказки на основе истории, автодополнение путей, (некоторых) комманд. работает из коробки

Заинтересовал, чертяка. Пошел ставить, смотреть и сравнивать с сабжем.

Loki13 ★★★★★
()
Ответ на: комментарий от MoldAndLimeHoney

Я fish хотел как «zsh без пердоллинга», основной поинт был в том, что ничего настраивать не надо, все удобно и работает из коробки.

Если имеется ввиду 100% совместимость с bash, то думаю этого достичь практически невозможно, слишком уж много у него всяческих «фич» и «особенностей», тут даже у zsh скорее всего будут кое-где вопросы

Наверное поэтому в fish от нее и отказались

fish ценен именно как интерактивный shell c удобными настройками по умолчанию, автокомплитом и историей комманд

Особенно если добавить fzf.fish 🔍🐟

Да и с однострочниками на самом деле особых проблем нет, мне лично без разницы что писать

export PREFIX=">>>"; while true; do echo $PREFIX$(date) ; sleep 1; done

или

set -x PREFIX ">>>"; while true; echo $PREFIX$(date) ; sleep 1; end
alx777 ★★
()
Ответ на: комментарий от MoldAndLimeHoney

Но зачем? Почему бы не запускать баш башем, зачем это запускать фишем?

neumond
()
Ответ на: комментарий от no-such-file

Я пишу, и могу сказать что скрипты на нём писать удобнее и проще чем на баше. Чуть ли не главная ценность фиша в самом языке.

neumond
()

на языке программирования Rust

в новостях принято писать о достоинствах, а не недостатках того или иного приложения.

rsync ★★
()
Ответ на: комментарий от dataman

Попутно можно заработать, наверное.

Наверное у них есть стабильные источники дохода. Это растяпы готовы за звёздочки наяривать. Я так понял суть переписывания на раст была именно в том, чтобы на это слетелись фанбои раста.

no-such-file ★★★★★
()
Ответ на: комментарий от neumond

Ну про несовместимость синтаксиса и тут писали, и в его документации. Лично мне интерактивное договаривание командной строки исходя из истории просто анноит. Не люблю, когда перед глазами постоянно что-то мелькает. Так что, это вопрос не религии, а юзабилити. Ну и цветастый он очень, такой веселый, что обхохочешься.

Как минимум, баш — $(command), fish — (command). Ну, и если ты пишешь в шебанге /usr/bin/fish, то ты предполагаешь, что у пользователя твоего скрипта он есть. А это не так. Хочешь быть «со всеми совместимым», используй хотя бы /usr/bin/bash, а совсем хорошо, если /bin/sh.

Ну и вот  — https://fishshell.com/assets/img/screenshots/scripting.png

С кем это совместимо?

gns ★★★★★
()
Последнее исправление: gns (всего исправлений: 3)
Ответ на: комментарий от gns

Лично мне интерактивное договаривание командной строки исходя из истории просто анноит

Ну вот вы привели картинку со скрипт-блоком, вы же не будете его вводить заново? В истории такого может быть несколько, напечатал начальные символы, получил вариант или варианты, стрелочками пролистал и нажал ввод на нужном.

если ты пишешь в шебанге /usr/bin/fish, то ты предполагаешь, что у пользователя твоего скрипта он есть

Для себя же пишешь, а для кого еще?

dmitry237 ★★★★★
()
Ответ на: комментарий от gns

По мне, так O-My-Zshell так уже перебор :)

Это вообще п-ц. Ведь оно нигде не идёт по дефолту, но люди прямо цленаправленно идут качать его, потом к нему овердохера скриптов (плагинов) от Васей Пупкиных (вот не верю, что они их каждый раз вычитывают), но в то-же время, пытаются рассуждать про какую-то секурность-шмекурность, типа: «У меня все пароли хранятся в хардарном токене…». Да хоть в швейцарском банке - ты себе в повседневный шелл понапихал столько левого говнища, что будь ты кому то нужен - твой «секурный лапоть» вывернули бы наизнанку со всеми твоими токенами и зашифрованными разделами не особо напрягаясь.

bdrbt
()
Ответ на: комментарий от MoldAndLimeHoney

«Помогает» - очень субъективное понятие. Иногда предсказуемость важнее «псевдоумности».

bdrbt
()
Ответ на: комментарий от gns

Ну то есть, нельзя использовать питон, потому что он несовместим с жаваскриптом.

интерактивное договаривание командной строки исходя из истории просто анноит

set -g fish_autosuggestion_enabled 0

баш — $(command), fish — (command)

И?

Хочешь быть «со всеми совместимым»

Зачем? Баш тоже не везде есть, в докерах его почти всегда нет, только /bin/sh. Мне ещё в этим совместимых скриптах придётся выяснять, нужен ли баш, или хватит ему sh.

С кем это совместимо?

Зачем? Что за святая вера в необходимость этой совместимости? Ну сделали разок sh++ в виде bash, почему нужно это делать снова?

neumond
()
Ответ на: комментарий от dmitry237

Ну вот вы привели картинку со скрипт-блоком, вы же не будете его вводить заново?

Ичо? И как часто это нужно? Односточники на восемь пайпов bash и так запоминает. Это все фичи ради фич. Если мысль получается длиннее односточника, так удобнее ее в скрипте оформить, чем такие портянки на экране писать.

Для себя же пишешь, а для кого еще?

Для себя я на бумажке перьевой ручкой в основном пишу, для памяти. Или в текстовый файл. А код я пишу для пользователей. Работа у меня такая.

gns ★★★★★
()
Ответ на: комментарий от neumond

Зачем? Что за святая вера в необходимость этой совместимости? Ну сделали разок sh++ в виде bash, почему нужно это делать снова?

«Святая вера» — она из практики. А в шелл-эскейпах редакторов как этот фиш себя вести будет? Вон про грабли с миднайтом коллега dataman уже указал. Вот мне даже интересно, если подключить к линуксу какой-нибудь старый железный VT-240 и запустить fish чисто по-приколу, то сколько глюков будет наловлено? :) Подозреваю, что эти авторы фиша ни одного железного терминала в жизни-то не видели.

gns ★★★★★
()
Ответ на: комментарий от gns

Подозреваю, что эти авторы фиша ни одного железного терминала в жизни-то не видели.

А их можно увидеть где то кроме музеев?

MOPKOBKA ★★★★★
()
Ответ на: комментарий от MOPKOBKA

Ко мне домой приезжай, покажу :) И да, иногда можно. В промышленных компьютерах кое-где есть.

В 2007м, кстати в Штатах в аэропорту Сан-Франциско брали машину на прокат, так в пункте выдачи сидели мужики за IBM-мовским терминалом и матричным принтером к нему. Типа, может у них в ихнем Avis'e на всю контору один мейнфрейм и куча терминалов. А чо? Телефонная линия с модемом всегда есть. Дешево-сердито-централизовано.

gns ★★★★★
()
Последнее исправление: gns (всего исправлений: 1)
Ответ на: комментарий от dataman

И автор сразу такой «неет, у меня такая же нога, но не болит. Это космические лучи!!11»

Okay, I also have a Debian 12 installation here and it works.

Check that the file doesn't have any random bit flips - the sha256sum should be "fa3bebfecc3d23f41bf1dd847916b5ea808feed6339bd4dc0af51361d32ed1dc"
fluorite ★★★★★
()
Ответ на: комментарий от gns

Ичо? И как часто это нужно?

Это зависит от задачи, почему бы не использовать для двухразового применения скрипт-блок, а не копировать его в файл? Ну вот если больше не понадобится.

А код я пишу для пользователей. Работа у меня такая.

На работе должны быть определены стандарты, поэтому этот вопрос скорее административный, а не технический.

dmitry237 ★★★★★
()
Ответ на: комментарий от Ivan_S

которые его пишут или/и распространяют с очень негативной энергией

Вот это я понимаю, аргумент!

papin-aziat ★★★★★
()
Ответ на: комментарий от dmitry237

Вот опять получается разговор о конфликте благих пожеланий с суровой реальностью. Кто кому чего должен я не знаю. Должен — это когда взял и не отдал.

gns ★★★★★
()
Ответ на: комментарий от gns

разговор о конфликте благих пожеланий с суровой реальностью

Тогда и говорить о совместимости/несовместимости не имеет смысла, это просто другой шелл.

dmitry237 ★★★★★
()
Ответ на: комментарий от dmitry237

Имеет. Или он везде, или он нигде. Вы этот fish проверяли в shell-эскейпах? Вон датаман проверил, ему не понравилось. Лично мне этого теста достаточно, что бы фишем не пользоваться от слова совсем

gns ★★★★★
()
Ответ на: комментарий от token_polyak

m.wikipedia

ПОЧЕМУ?! Почему нельзя удалить эту грёбаную m из ссылки?

eternal_sorrow ★★★★★
()
Ответ на: комментарий от papin-aziat

Я уже выше пример приводил, когда из-за синтаксиса fish сломалась обычная интерактивная команда с pkg-config. Мне такие фокусы не нужны, дополнительный головняк.

Синтаксис fish правильный, синтаксис bash ужасный. Одних закрывашек несколько штук лол:

# Это что за шизоид придумал вообще?

for
done

function {
}

if
fi

case
esac

Проблема в том, что менять это надо было лет 30 назад. Сейчас уже поздно.

Автору fish нужно просто смириться с тем, что хотят пользователи – настроенного zsh – и пользовательская база увеличится на порядки.

MoldAndLimeHoney
()
Ответ на: комментарий от gns

Вы этот fish проверяли в shell-эскейпах?

Я с ним вообще не знаком. У меня для своих целей pwsh, им и пользуюсь, но никому не рекомендую. Но fish, судя по описанию, имеет схожие черты интерактивного режима.

dmitry237 ★★★★★
()

Посправшивал https://chat.qwenlm.ai/ про fish. Мне он на удивление понравился. Синтаксис нравится больше. Хотя меня воплне устраивает bash, но fish как-то понятней, документации по меньше.

lbvf50txt
()
Ответ на: комментарий от gns

Интересное выражение, проверить в shell-эскейпах. Что бы это ни значило, но сам по себе фиш работает хорошо и контрольные коды терминала использует как надо. Строку в mc когда-нибудь починят.

neumond
()

Уже давно работаю с Bash, привык к клавиатурным сокращениям, еще не известно какие именно сокращения пренадлежат Bash, а какие fetchline (так вроде). Переходить на новую shell смысла особого нет, время потребует, а какие-то существеные бонусы не даст.

lbvf50txt
()
Ответ на: комментарий от neumond

Shell escape — это возможность из некоторых программ выйти в шелл не покидая сами программы. Типичный пример — Ctrl-O в миднайте. Ну вот в емаксе и vi проверить надо :) Поставьте fish дефолтным шеллом и скажите емаксу M-x shell. Посмотрите, что будет.

gns ★★★★★
()
Последнее исправление: gns (всего исправлений: 3)
Ответ на: комментарий от bdrbt

Ведь оно нигде не идёт по дефолту…

Начиная с macOS Catalina (версии 10.15), по умолчанию используется Zsh (Z Shell) в качестве основной оболочки командной строки. Ранее, до macOS Mojave (версии 10.14), по умолчанию использовалась Bash.

но люди прямо цленаправленно идут качать его, потом к нему овердохера скриптов (плагинов) от Васей Пупкиных (вот не верю, что они их каждый раз вычитывают)…

Согласен. Возможности Bash огромны, масса клавиатурных сокрашений, brace expansion. Если потратить время на изучение Bash, то продуктивность возрастет колоссально, shell с 10ком плагинов уже не будут такт требоваться.

Еще початился с AI, говорят в Zsh есть автокорекция ошибок. Тоже удобно наверно. Курячий Zsh любит.

lbvf50txt
()
Последнее исправление: lbvf50txt (всего исправлений: 1)
Ответ на: комментарий от MoldAndLimeHoney

Это что за шизоид придумал вообще?

Тогда видимо казалось, что это удобно и весело, какая теперь разница?

синтаксис bash ужасный

Какая разница? Стандарт есть стандарт, теперь так и вряд ли изменится в обозримом будущем.

Как посторонний наблюдатель (не айтишник) открою тебе секрет: все языки программирования выглядят как говно, и кстати, математика тоже 😁

papin-aziat ★★★★★
()
Ответ на: комментарий от papin-aziat

А как же сжатый раскрашенный жаваскрипт на весь экран, который часто в новостях служит фоновой картинкой? Красиво же, как новогодняя ёлка.

neumond
()
Ответ на: комментарий от papin-aziat

Способы записи некоторых языков так вообще ужасны, например, китайского. И ничего, половина населения Земли с этим как-то справляется.

gns ★★★★★
()
Ответ на: комментарий от gns

Способы записи некоторых языков так вообще ужасны, например, китайского. И ничего, половина населения Земли с этим как-то справляется.

Это они нам непонятны. Не факт, что они ужасны тем кто использует эти языки. Есть свои плюсы.

lbvf50txt
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.