fish прикольный шел, использую около 2 лет. Но все же это не posix совместимый шел и многие важные вещи там работать просто не будут. На счет удобства скриптинга на фише - это очень спорный вопрос))) Если копнете чуть глубже, выяснится, что фиш просто никак не умеет некоторые очень важные вещи и добавлять их не собираются, потому что разработчик не желает их имплементить и поддерживать. Из коробки очень хороший автокомплит по coreutils и часто используемых утилит, не забывайте поставить mandb, откуда в т.ч. берется информация по параметрам. Но стоит выйти за это и столкнешься со многими проблемами. До сих пор не так много софта поддерживает из коробки автодополнение fish. Не так уж давно, например, это только завезли в kubectl, а там он прям супер нужен. До этого приходилось писать/дополнять чужие попытки сделать автокомплит. И это не единичный случай, такого очень много) Если тулза не поддерживает комплит по фишу, то придется писать свой автокомплит, если тебе он нужен, а в некоторых случаях придется ставить заглушки явно его отключая, чтобы отключить попытки фиша что-то подставлять, потому что оно ломает вывод или мешает дополнению по именам файлов. Про поиск по истории не сказали, что он еще и контекстный. В определенной директории, где выполнялась та или иная команда, вес у нее будет значительно выше и при начале ввода первых букв команды, фиш начнет подсвечивать теневым текстом остаток наиболее релевантной команды, это весомо отличается от обычного Ctrl-R в bash, но там это решается через тот же fzf. Не рассказали про очень крутую штуку с аббревитаурами - вводишь аббревиатуру и она распаковывается при нажатии пробела в заданный текст. К сожалению это работает только в начале ввода команды. Где-нибудь в середине строки работать не будет (в zsh плагином это достигается и это супер удобно для ввода каких-нибудь сложных и длинных параметров, например `--sort-by=.metadata.creationTimestamp --field-selector=.spec.nodeName=...`. В zsh делаешь аббревиатуру, типа !sn и по нажатию пробела она распакуется. Конечно, это можно реализовать каким-нибудь сторонним средством в MacOS дефолтный распаковыватель аббревиатур (плохо работает в консоле) или какой-нибудь модуль Alfred. В лине, например, AutoKey, в Windows AutoHotKey - но все это разные реализации, никакой кроссплатформенности. Есть много хороших плагинов, которые упрощают работу для тех кто много работает в консоле, например автозакрытие скобочек и кавычек как в IDE. Фиш позволяет настроить любой биндинг, у него даже есть инструмент для захвата сочетания, вводишь fish_key_reader, дальше сочетание и он подсказывает тебе какой биндинг добавить для любого действия. И при этом он очень быстрый. Если его не захламлять какими-нибудь монструозными плагинам-менеджерами и настройками (надеюсь oh-my-fish не как oh-my-zsh), то он очень быстр (кстати там есть даже утилита для тестирования скорости работы). Мелкие приятные вещи типа alt+# (комментирует, раскоментирует команду), хотя в баше работает через последовательность ESC, # , но назад нужно возвращать из истории и стерать # самому. alt + s - подстановка в начало команды sudo, но такое себе, зато posix совместимая штука !! не работает (ну т.е. sudo !!) в fish не работаетг И еще много много всего, плюсов и минусов. Но честно сказать, все больше подрывает меня пересесть на zsh обратно - пользовался им около года несколько лет назад. Если прям совсем хочеться мощи консоли и есть желание упарываться, то лучше использовать zsh. Но придется потратить немного времени на допиливание его. У zsh огромная экосистема плагинов. Использовать фреемворки и тяжелые менеджеры пакетов типа oh-my-zsh - кмк дич, шел превращается в жутко тормозящую оболочку с часто ломающими что-нибудь плагинами/зависимостями, а время активации нового промта возрастает до визуальной задержки. С ними, чаще всего, идет нагромождение хлама, который нужно отдельно прописывать и отключать. И в целом zsh очень не дружелюбная среда для настройки - можете посмотреть примеры конфигов на фише и на zsh, ну это земля и небо. Да что говорить, книга по zsh есть отдельная на 600 страниц - ZSH Manual). Тем не менее, если решитесь использовать - то начинайте с пустой конфигурации, подключите antidote и активируйте несколько плагинов типа zsh-utils, zsh-fzf-history-search, zsh-abbr, fast-syntax-highlighting, zsh-autosuggestions, zsh-completions, zsh-history-substring-search, zsh-syntax-highlighting. Без всякой настройки это уже превосходит возможности фиша в удобстве. Для мощного промта подключите starship (о нем чуть ниже), для более простого и легкого полно всяких тем. zsh очень функциональный и сложноватый в настройке под себя, если хочется совсем лютой кастомизации. Но если в дебри не лезть он даст фулпак возможностей. Потому рекомендация такая - хочется функциональный шел, удобный и быстрый полностью из коробки и нет необходимости в более продвинутых паттернах использования оболочки - то fish это хороший выбор. Если хочется не менее мощный шел, куда более гибкий и Posix совместимый, быстрый и, если есть время потратить на базовуюц настройку, то zsh очевидный выбор. В остальных моментах и чуть настроенный bash подходит.
Ну и еще дополнение. Для плагинов удобней использовать fisher (установщик плагинов для фиша, конфиг можно хранить в дотфайлах в гите, например). А для красивости очень рекомендую посмотреть на starship - кроссплатформенная и кроссшельная штука с поддержкой очень большого числа всего, позовляющая гибко, модульно и супер просто настроить красивый и наглядный prompt.
фиш конечно хорош, много вещей работают из коробки, но из за того что несовместим с баш, на нем к сожалению не работают нужные скрипты, например nvm. все время переключать шелы неудобно, поэтому zsh мой выбор
@@DmitryRomantsov > И без плагинов, кстати. Конкретно это да :-). Но по-сути все seq, bc, echo и т.п. - это плагины. Просто благодаря архитектуре unix и shell, всё ПО соответствующее определённым соглашениям по работе с stdin, stdout, stderr и кодов возврата будет плагином для shell. Отсюда: среда работы в unix это и есть сам/весь unix.
Кстати, было бы интересно посмотреть на реализацию (()) не через встраивание в shell, как сейчас, а через отдельный процесс с интерфейсом в виде псевдоФС или, на худой конец, в виде unix domain socket. Допустим, это будет чуть поправленный bc, который умеет слушать вход с unix domain socket. На вход - выражение в текстовом виде: "r=28; 2*4*a(1)*r". На выход - ответ. А (( будет просто отправлять текст в этот socket, без обработки(ну кроме подстановки перменных с $). Т.о. первый же скрипт требующий вычисления будет стартовать эту прогу и далее никаких затрат на fork/exec. Небольшие затраты на работу с сокетом, НО. Но зато shell становится легче и можно как угодно добавлять, совершенствовать возможности этой отдельной проги, без затрагивания и даже обновления shell. Плюс, переносимость арифметических операций между разными shell(так же как сейчас с sed, awk, grep). То же самое и для [.
Что бы BASH умел листать стрелками историю по частично набранной команде нужно добавить в файл .inputrc всего две строки "\e[A": history-search-backward "\e[B": history-search-forward
да на любом проде или деве или в контейнерах по дефолту итд - баш. и делать нужно на нем. и все 🤷♂️ фиш умер так и не родившись. только локально разве что.
ну на вкус и цвет как известно for в баше позволяет делать все тоже самое ) fish немного удобнее это делает, но не киллер фича. история команд за прошлый год? зачем ? обычно реверс серч на предыдущие 2-3 часа. все остальное, если серьезно нужно заносится в ansible/alias математика в шел скриптах? зачем? понимаю json из коробки ) вообще переход на python для адванс скриптинга давно уже мейнстрим поиск по истории команд history | grep наделать своих элиасов на гит команды без плагинов, под свой вкус вааще не удивил ) а вот в чем прикол манжары? нет, меня мой выбор макось + debian более чем устраивает, но вдруг ваши фломастеры вкуснее ))
Еще можно посмотреть в сторону nushell. Что-то среднее между power-shell, bash и sql. Присутствует типизация и нативная поддержка yaml, json, csv (что обрадовало после попытки в баше распарсить yaml).
я так-то грепаю хистори в баш. Я познал юникс-вей? Поиск конечно зачетный, ради него уже стоит попробовать. Но может можно рыбью историю отдельно как-то установить, не тащить к себе весь новый шелл? Вообще, я реально Cool Retro Term временами работаю. Глаза конечно спасибо за сияющую штуку не скажут, но разнообразие вносит. Да, я знаю толк в извращениях.
Рыба не распознаёт многострочные команды, если не ошибаюсь. Если точнее, одну из шелловых команд, необходимых для установки докера. Алсо, zsh может находить по первым символам команды в истории, и для него arguably немного проще писать скрипты. Но это чисто мои 5 копеек.
Ощущение, что некоторые результаты были неожиданными для автора. :-) Например, где (echo 1 2 3). Ожидалось ведь, что для каждой цифры будет выполнена отдельная команда echo $x ?
Честно так и не понял почему это всем шелам шелл, ну да ладно Лайфхак: если не помнишь команду содержащую слово "omf" и она есть в истории то "history | grep omf" что выдаст лист с порядковым номером и потом "!порядковыйНомерИзПредыдущейКоманды" что вставит эту команду в терминал А так вообще мой выбор ZSH
Круто! Я чет скриптинг их не использовал, надо ещё раз попробовать
fish прикольный шел, использую около 2 лет. Но все же это не posix совместимый шел и многие важные вещи там работать просто не будут. На счет удобства скриптинга на фише - это очень спорный вопрос))) Если копнете чуть глубже, выяснится, что фиш просто никак не умеет некоторые очень важные вещи и добавлять их не собираются, потому что разработчик не желает их имплементить и поддерживать.
Из коробки очень хороший автокомплит по coreutils и часто используемых утилит, не забывайте поставить mandb, откуда в т.ч. берется информация по параметрам. Но стоит выйти за это и столкнешься со многими проблемами. До сих пор не так много софта поддерживает из коробки автодополнение fish. Не так уж давно, например, это только завезли в kubectl, а там он прям супер нужен. До этого приходилось писать/дополнять чужие попытки сделать автокомплит. И это не единичный случай, такого очень много) Если тулза не поддерживает комплит по фишу, то придется писать свой автокомплит, если тебе он нужен, а в некоторых случаях придется ставить заглушки явно его отключая, чтобы отключить попытки фиша что-то подставлять, потому что оно ломает вывод или мешает дополнению по именам файлов.
Про поиск по истории не сказали, что он еще и контекстный. В определенной директории, где выполнялась та или иная команда, вес у нее будет значительно выше и при начале ввода первых букв команды, фиш начнет подсвечивать теневым текстом остаток наиболее релевантной команды, это весомо отличается от обычного Ctrl-R в bash, но там это решается через тот же fzf.
Не рассказали про очень крутую штуку с аббревитаурами - вводишь аббревиатуру и она распаковывается при нажатии пробела в заданный текст. К сожалению это работает только в начале ввода команды. Где-нибудь в середине строки работать не будет (в zsh плагином это достигается и это супер удобно для ввода каких-нибудь сложных и длинных параметров, например `--sort-by=.metadata.creationTimestamp --field-selector=.spec.nodeName=...`. В zsh делаешь аббревиатуру, типа !sn и по нажатию пробела она распакуется.
Конечно, это можно реализовать каким-нибудь сторонним средством в MacOS дефолтный распаковыватель аббревиатур (плохо работает в консоле) или какой-нибудь модуль Alfred. В лине, например, AutoKey, в Windows AutoHotKey - но все это разные реализации, никакой кроссплатформенности.
Есть много хороших плагинов, которые упрощают работу для тех кто много работает в консоле, например автозакрытие скобочек и кавычек как в IDE.
Фиш позволяет настроить любой биндинг, у него даже есть инструмент для захвата сочетания, вводишь fish_key_reader, дальше сочетание и он подсказывает тебе какой биндинг добавить для любого действия.
И при этом он очень быстрый. Если его не захламлять какими-нибудь монструозными плагинам-менеджерами и настройками (надеюсь oh-my-fish не как oh-my-zsh), то он очень быстр (кстати там есть даже утилита для тестирования скорости работы).
Мелкие приятные вещи типа alt+# (комментирует, раскоментирует команду), хотя в баше работает через последовательность ESC, # , но назад нужно возвращать из истории и стерать # самому.
alt + s - подстановка в начало команды sudo, но такое себе, зато posix совместимая штука !! не работает (ну т.е. sudo !!) в fish не работаетг
И еще много много всего, плюсов и минусов.
Но честно сказать, все больше подрывает меня пересесть на zsh обратно - пользовался им около года несколько лет назад. Если прям совсем хочеться мощи консоли и есть желание упарываться, то лучше использовать zsh. Но придется потратить немного времени на допиливание его. У zsh огромная экосистема плагинов. Использовать фреемворки и тяжелые менеджеры пакетов типа oh-my-zsh - кмк дич, шел превращается в жутко тормозящую оболочку с часто ломающими что-нибудь плагинами/зависимостями, а время активации нового промта возрастает до визуальной задержки. С ними, чаще всего, идет нагромождение хлама, который нужно отдельно прописывать и отключать. И в целом zsh очень не дружелюбная среда для настройки - можете посмотреть примеры конфигов на фише и на zsh, ну это земля и небо. Да что говорить, книга по zsh есть отдельная на 600 страниц - ZSH Manual). Тем не менее, если решитесь использовать - то начинайте с пустой конфигурации, подключите antidote и активируйте несколько плагинов типа zsh-utils, zsh-fzf-history-search, zsh-abbr, fast-syntax-highlighting, zsh-autosuggestions, zsh-completions, zsh-history-substring-search, zsh-syntax-highlighting. Без всякой настройки это уже превосходит возможности фиша в удобстве. Для мощного промта подключите starship (о нем чуть ниже), для более простого и легкого полно всяких тем. zsh очень функциональный и сложноватый в настройке под себя, если хочется совсем лютой кастомизации. Но если в дебри не лезть он даст фулпак возможностей.
Потому рекомендация такая - хочется функциональный шел, удобный и быстрый полностью из коробки и нет необходимости в более продвинутых паттернах использования оболочки - то fish это хороший выбор. Если хочется не менее мощный шел, куда более гибкий и Posix совместимый, быстрый и, если есть время потратить на базовуюц настройку, то zsh очевидный выбор. В остальных моментах и чуть настроенный bash подходит.
Ну и еще дополнение. Для плагинов удобней использовать fisher (установщик плагинов для фиша, конфиг можно хранить в дотфайлах в гите, например).
А для красивости очень рекомендую посмотреть на starship - кроссплатформенная и кроссшельная штука с поддержкой очень большого числа всего, позовляющая гибко, модульно и супер просто настроить красивый и наглядный prompt.
Есть ещё fish tide, это так на всякий случай
ZSH + OH-MY-ZSH =
Перешел со временем на ZSH c Fish, из-за несовместимости с Bash форматом. Но в остальном - отличная штука
В чем проблема указать zsh перед именем скрипта?
фиш конечно хорош, много вещей работают из коробки, но из за того что несовместим с баш, на нем к сожалению не работают нужные скрипты, например nvm.
все время переключать шелы неудобно, поэтому zsh мой выбор
ты скрипты копипастишь в шелл напрямую?
SOER, в bash есть ctrl-R/ctrl-S :-).
Математика обычно так делается:
echo 2 + 2 | bc
zsh alt-p, alt-n, а поиск по части строки crrl-r. И без плагинов, кстати.
@@DmitryRomantsov
> И без плагинов, кстати.
Конкретно это да :-). Но по-сути все seq, bc, echo и т.п. - это плагины. Просто благодаря архитектуре unix и shell, всё ПО соответствующее определённым соглашениям по работе с stdin, stdout, stderr и кодов возврата будет плагином для shell.
Отсюда: среда работы в unix это и есть сам/весь unix.
Кстати, было бы интересно посмотреть на реализацию (()) не через встраивание в shell, как сейчас, а через отдельный процесс с интерфейсом в виде псевдоФС или, на худой конец, в виде unix domain socket. Допустим, это будет чуть поправленный bc, который умеет слушать вход с unix domain socket. На вход - выражение в текстовом виде: "r=28; 2*4*a(1)*r". На выход - ответ. А (( будет просто отправлять текст в этот socket, без обработки(ну кроме подстановки перменных с $). Т.о. первый же скрипт требующий вычисления будет стартовать эту прогу и далее никаких затрат на fork/exec. Небольшие затраты на работу с сокетом, НО. Но зато shell становится легче и можно как угодно добавлять, совершенствовать возможности этой отдельной проги, без затрагивания и даже обновления shell. Плюс, переносимость арифметических операций между разными shell(так же как сейчас с sed, awk, grep).
То же самое и для [.
bash echo $((2+2))
z в баше это по сути dirs pushd и popd
glo gaa и вообще любые сокращение делаются через alias
Спасибо большое за ваши обучающие видео)
Что бы BASH умел листать стрелками историю по частично набранной команде нужно добавить в файл .inputrc всего две строки
"\e[A": history-search-backward
"\e[B": history-search-forward
Пользуюсь фишем как основным шеллом под макось, но только сейчас узнал что к нему есть такие крутые плагины, спасибо!
Спасибо большое за контент, очень полезный! Жаль что я досмотрел видео когда уже прошел всю боль установки:))
Спасибо Евгений, отличный ролик.
да на любом проде или деве или в контейнерах по дефолту итд - баш. и делать нужно на нем. и все 🤷♂️ фиш умер так и не родившись. только локально разве что.
Делать да, но работать то каждый день - на чем удобно =)
ну на вкус и цвет как известно
for в баше позволяет делать все тоже самое ) fish немного удобнее это делает, но не киллер фича.
история команд за прошлый год? зачем ? обычно реверс серч на предыдущие 2-3 часа. все остальное, если серьезно нужно заносится в ansible/alias
математика в шел скриптах? зачем? понимаю json из коробки )
вообще переход на python для адванс скриптинга давно уже мейнстрим
поиск по истории команд
history | grep
наделать своих элиасов на гит команды без плагинов, под свой вкус вааще не удивил )
а вот в чем прикол манжары? нет, меня мой выбор макось + debian более чем устраивает, но вдруг ваши фломастеры вкуснее ))
еще будет видос "красивости в Fish", там про темки, цвета, функции, хуки и тому подобные штуки расскажу, здесь решил не загромождать
для истории да и вообще есть fzf))) а вообще баш умеет тоже самое)))
@@arleenlasleur и что в нем такого под дев, чего нет в остальных дистрибах ?
Oh-my-bash ставлю и больше мне и не нужно)
Еще можно посмотреть в сторону nushell. Что-то среднее между power-shell, bash и sql. Присутствует типизация и нативная поддержка yaml, json, csv (что обрадовало после попытки в баше распарсить yaml).
Да, fish - крутой shell, юзаю его уже почти год)
Поиск в баше - set -o vi (для вимеров), далее esc , /, вводишь что надо и по вимовски (j , k) листаешь.
Соер стал лучше выглядеть.
То-ли ЗОЖ, то ли смет выставил.
Снюс долбит
привет, если не секрет, для работы какой у тебя ПК(ноутбук) ?
Не понимаю, но ведь фишевые скрипты не будут работать в баше. Тогда зачем фиш нужен?
Для неосиляторов которым bash не зашел
я так-то грепаю хистори в баш. Я познал юникс-вей?
Поиск конечно зачетный, ради него уже стоит попробовать. Но может можно рыбью историю отдельно как-то установить, не тащить к себе весь новый шелл? Вообще, я реально Cool Retro Term временами работаю. Глаза конечно спасибо за сияющую штуку не скажут, но разнообразие вносит. Да, я знаю толк в извращениях.
Рыба не распознаёт многострочные команды, если не ошибаюсь. Если точнее, одну из шелловых команд, необходимых для установки докера.
Алсо, zsh может находить по первым символам команды в истории, и для него arguably немного проще писать скрипты. Но это чисто мои 5 копеек.
самый шельный шеел из всех шеелов
поиск по истории команд есть и в баш
ctrl-r и повторять этот хоткей
seq это не фича фиша, это отдельная программа стандартная
1:12 она в bash есть ctrl+r нажимаешь и всё!!
В баше историю можно также настроить без плагинов
Чудо, а ты не использовал Alacritty ?
Подскажите как называется пакет z в убунте не могу найти?
Fish вроде по умолчанию не "интерпретирует" Bash. Вот его основной недостаток.
Не знаю я юзаю bash мне норм, а эти свистелки-перделки хз не понимаю .
юзай tcsh 👍
Где купить этот худи
да, fish очень хорош, тока у него слабенькая поддержка bash
Я использую bass когда надо bash
@@S0ERDEVS вот про bass не знал, спасибо))) приходилось мучиться, когда нужен был bash, на одном из устройств даже перешел изза этого на zsh)
broot,btop,exa,hanter
Ощущение, что некоторые результаты были неожиданными для автора. :-)
Например, где (echo 1 2 3). Ожидалось ведь, что для каждой цифры будет выполнена отдельная команда echo $x ?
Ага, echo 1 2 3 я ожидал в виде последовательности.
много скриптов на фиш написал. пользуюсь не первый год. видео ещё не смотрел, но сразу говорю: ФИШ - ИМБА
такое. это локально. а если еа енвах и в контейнерах и из коробки везде баш то поверь плевать на этот фиш.
Я bashit использую, он делает все то же самое только на bash, и плагинов и автокомплитов у него много
Bash - ctrl+r
на компе один админ а один пользователь пользуется только судо так вот админу поставил фиш а как обычному пользователю тоже фиш поставить
4:22 А почему только положительный результат?
Так мат. функции в алгебре работают. В целом корнем числа А считается именно положительное число В, квадрат которого равен А.
Уточню, что я именно про арифметический корень.
@@siteted2013 арифметика отрицательные числа не проходит?
Что значит "не надо ничего запоминать"??
Незасраный хомяк... такое вообще бывает?
Виртуалка же
ничего не понятно
zsh
Честно так и не понял почему это всем шелам шелл, ну да ладно
Лайфхак: если не помнишь команду содержащую слово "omf" и она есть в истории то "history | grep omf" что выдаст лист с порядковым номером и потом "!порядковыйНомерИзПредыдущейКоманды" что вставит эту команду в терминал
А так вообще мой выбор ZSH