Це відео не доступне.
Перепрошуємо.
Fish-шелл всем шелам шелл
Вставка
- Опубліковано 20 гру 2021
- #soer #itubeteam
Основной канал для общения и публикации новых видео - Телегарм - t.me/softwareengineervlog
Спонсорство - donate.s0er.ru
Сайт платным контентом - soer.pro
Зеркало для видео Дзен Видео - zen.yandex.ru/id/5f578bdf22e2...
GitHub - github.com/soerdev
Чат для программистов - / discord
Группа ВК - codeartblog
Круто! Я чет скриптинг их не использовал, надо ещё раз попробовать
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, это так на всякий случай
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
фиш конечно хорош, много вещей работают из коробки, но из за того что несовместим с баш, на нем к сожалению не работают нужные скрипты, например nvm.
все время переключать шелы неудобно, поэтому zsh мой выбор
ты скрипты копипастишь в шелл напрямую?
Спасибо большое за ваши обучающие видео)
ZSH + OH-MY-ZSH =
Пользуюсь фишем как основным шеллом под макось, но только сейчас узнал что к нему есть такие крутые плагины, спасибо!
Перешел со временем на ZSH c Fish, из-за несовместимости с Bash форматом. Но в остальном - отличная штука
В чем проблема указать zsh перед именем скрипта?
Спасибо Евгений, отличный ролик.
Еще можно посмотреть в сторону nushell. Что-то среднее между power-shell, bash и sql. Присутствует типизация и нативная поддержка yaml, json, csv (что обрадовало после попытки в баше распарсить yaml).
Спасибо большое за контент, очень полезный! Жаль что я досмотрел видео когда уже прошел всю боль установки:))
да на любом проде или деве или в контейнерах по дефолту итд - баш. и делать нужно на нем. и все 🤷♂️ фиш умер так и не родившись. только локально разве что.
Делать да, но работать то каждый день - на чем удобно =)
ну на вкус и цвет как известно
for в баше позволяет делать все тоже самое ) fish немного удобнее это делает, но не киллер фича.
история команд за прошлый год? зачем ? обычно реверс серч на предыдущие 2-3 часа. все остальное, если серьезно нужно заносится в ansible/alias
математика в шел скриптах? зачем? понимаю json из коробки )
вообще переход на python для адванс скриптинга давно уже мейнстрим
поиск по истории команд
history | grep
наделать своих элиасов на гит команды без плагинов, под свой вкус вааще не удивил )
а вот в чем прикол манжары? нет, меня мой выбор макось + debian более чем устраивает, но вдруг ваши фломастеры вкуснее ))
еще будет видос "красивости в Fish", там про темки, цвета, функции, хуки и тому подобные штуки расскажу, здесь решил не загромождать
для истории да и вообще есть fzf))) а вообще баш умеет тоже самое)))
@@arleenlasleur и что в нем такого под дев, чего нет в остальных дистрибах ?
Не понимаю, но ведь фишевые скрипты не будут работать в баше. Тогда зачем фиш нужен?
Для неосиляторов которым bash не зашел
Да, fish - крутой shell, юзаю его уже почти год)
привет, если не секрет, для работы какой у тебя ПК(ноутбук) ?
Что бы BASH умел листать стрелками историю по частично набранной команде нужно добавить в файл .inputrc всего две строки
"\e[A": history-search-backward
"\e[B": history-search-forward
Соер стал лучше выглядеть.
То-ли ЗОЖ, то ли смет выставил.
Снюс долбит
Oh-my-bash ставлю и больше мне и не нужно)
я так-то грепаю хистори в баш. Я познал юникс-вей?
Поиск конечно зачетный, ради него уже стоит попробовать. Но может можно рыбью историю отдельно как-то установить, не тащить к себе весь новый шелл? Вообще, я реально Cool Retro Term временами работаю. Глаза конечно спасибо за сияющую штуку не скажут, но разнообразие вносит. Да, я знаю толк в извращениях.
Подскажите как называется пакет z в убунте не могу найти?
Рыба не распознаёт многострочные команды, если не ошибаюсь. Если точнее, одну из шелловых команд, необходимых для установки докера.
Алсо, zsh может находить по первым символам команды в истории, и для него arguably немного проще писать скрипты. Но это чисто мои 5 копеек.
Где купить этот худи
Чудо, а ты не использовал Alacritty ?
Поиск в баше - set -o vi (для вимеров), далее esc , /, вводишь что надо и по вимовски (j , k) листаешь.
поиск по истории команд есть и в баш
ctrl-r и повторять этот хоткей
seq это не фича фиша, это отдельная программа стандартная
В баше историю можно также настроить без плагинов
1:12 она в bash есть ctrl+r нажимаешь и всё!!
самый шельный шеел из всех шеелов
Ощущение, что некоторые результаты были неожиданными для автора. :-)
Например, где (echo 1 2 3). Ожидалось ведь, что для каждой цифры будет выполнена отдельная команда echo $x ?
Ага, echo 1 2 3 я ожидал в виде последовательности.
Я bashit использую, он делает все то же самое только на bash, и плагинов и автокомплитов у него много
на компе один админ а один пользователь пользуется только судо так вот админу поставил фиш а как обычному пользователю тоже фиш поставить
Fish вроде по умолчанию не "интерпретирует" Bash. Вот его основной недостаток.
broot,btop,exa,hanter
4:22 А почему только положительный результат?
Так мат. функции в алгебре работают. В целом корнем числа А считается именно положительное число В, квадрат которого равен А.
Уточню, что я именно про арифметический корень.
@@siteted2013 арифметика отрицательные числа не проходит?
да, fish очень хорош, тока у него слабенькая поддержка bash
Я использую bass когда надо bash
@@S0ERDEVS вот про bass не знал, спасибо))) приходилось мучиться, когда нужен был bash, на одном из устройств даже перешел изза этого на zsh)
Bash - ctrl+r
много скриптов на фиш написал. пользуюсь не первый год. видео ещё не смотрел, но сразу говорю: ФИШ - ИМБА
такое. это локально. а если еа енвах и в контейнерах и из коробки везде баш то поверь плевать на этот фиш.
Что значит "не надо ничего запоминать"??
ничего не понятно
zsh
Незасраный хомяк... такое вообще бывает?
Виртуалка же
Честно так и не понял почему это всем шелам шелл, ну да ладно
Лайфхак: если не помнишь команду содержащую слово "omf" и она есть в истории то "history | grep omf" что выдаст лист с порядковым номером и потом "!порядковыйНомерИзПредыдущейКоманды" что вставит эту команду в терминал
А так вообще мой выбор ZSH
Не знаю я юзаю bash мне норм, а эти свистелки-перделки хз не понимаю .
юзай tcsh 👍