LINUX.ORG.RU

Fish 3.5

 ,

Fish 3.5

2

3

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, дополнение будет выполняться только при выполнении всех указанных условий – это должно улучшить работу кэширования.

>>> Подробности

★★★★★

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

fish не об украшательствах. fish - это реально удобная оболочка, потому что создавалась не на основе кода и концепций из 1970-х, в лучшем случае 1980-х.

Он просто очень удобен как интерактивная оболочка, гораздо удобнее bash. С zsh сложно сравнить, мне zsh никогда не заходил, как раз из-за ощущений, что zsh с одной стороны не слишком далеко ушёл от bash, с другой стороны — ориентирован на ненужные украшательства.

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

Тогда почему ты на linux форуме?

А что не так с простым запуском программ в линуксе?

Windows 11 для ленивых пацанов!

Она денег просит

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

не везде. во фришке по умолчанию «немецкий» шел ЕМНИП

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

стремиться к снижению ментальной нагрузки

[GN]стремится[/GN]

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

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

в скриптах и утилитах типа ls обычно делают проверку типа этой:

~ 
➜ python                
Python 3.10.5 (main, Jun  6 2022, 18:49:26) [GCC 12.1.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.stdout.isatty()  # значит разукрашиваем вывод
True
>>> open('/tmp/out','w').isatty()  # 
False

На баше оно выглядит так:

if [ -t 1 ]; then
    # вывод лгбт-дрисни
fi
tz4678_2
()
Ответ на: комментарий от pihter

Она денег просит

Это не проблема, беда в том, что я винду постоянно замечаю, она не даёт о себе забыть.

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

Тогда почему ты на linux форуме?

Потому что использую линукс. В том числе и как единственную ОС на своих десктопах. Причём с прошлого века.

Зачем ты мучаешь себя? Windows 11 для ленивых пацанов!

Я себя не мучаю, я наслаждаюсь. Ленивый не значит безрукий. Но если у меня появятся задачи которые решаются только и исключительно софтом под Windows 11 — у меня будет Windows 11 одновременно с Линукс. Я не делаю из ОС религию, так же ОС уже не является моим хобби. Она даже не инструмент, она подставка под инструменты.

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

буду и далее ksh использовать.

Для души я тоже предпочитаю mksh. Компактная кодовая база, один ман, один конфиг, а не как в жирногну. Не перегружена фичами. Но, как следствие, не умеет например process substitution (не путать с command substitution) и совпадения по regexp.

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

вот вы своим бгг как раз сейчас и подтверждаете это утверждение Савельева

Я не знаком с трудами Савельева, но вы видимо один из адептов, держите нас в курсе. ;)

Что касается «бгг», я было описал как и почему допустил ошибку, но потом решил, что ошибки это не исправит.

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

Fish. Перевёл роутер и макбук на него, очень удобно.

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

Аналогично. Проще запомнить хоткеи как в bash/ksh, которые везде.

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

Зачем нужны эти все эти ваши фиши, когда есть Awk/Perl/Python/PS? Они гораздо мощнее любой оболочки, да и переносимее.

А написать пяток команд вызовов по очереди можно и на sh.

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

А что за vi-режим?

Дык в ksh уже 50 лет как set -o vi и ура. Для любителей есть также set -o emacs. Если первым постоянно пользуюсь, то вторым ни разу.

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

сколько скриптов ты написал для других, а не для себя?

У меня 90% скриптоты для других писана. И на sh дай бог 1/10 из всего этого.

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

нет, я не являюсь «ревностным приверженцем» этого «science geek». так-то я и Била Гейца с его сверхсветовыми пизнесами тоже почитывал и кое в чём с ним даже согласен. что совсем не означает, что я «адепт Била Гейца». у вас тут - типовая ошибка в логике.))

по второму предложению, OK.

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

у вас тут - типовая ошибка в логике

О, а где ошибка в логике «пишешь бгг - экономишь джоули в мозгу» не подскажешь?)

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

Как же я люблю фанатов фрика Савельева. По уровню фапа на наукообразные постулаты - впереди планеты всей =)

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

вас тут - типовая ошибка в логике.))

Я не приводил никаких логических построений, следовательно выяснить как возникла пара «читал – адепт», можно лишь построив эту цепочку самостоятельно. Приписать что-то оппоненту, а потом с ним не согласиться – проигрышная стратегия.

Upd: экономя джоули на заглавных, планету не захватишь, что с Гейтсом, что без.

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

еще не видел шелл, в котором можно бы было что-то такое, чего нельзя в баше

В баше можно

(ls | ? {$_.Length -gt 1Mb}).FullName

?

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

set -o vi

Я у себя в дебиане (там, вроде, dash, я только пару недель взад узнал, что не баш) пользу, приятно, но не совсем то. Хочется больше вима. Вот интересно бы поглядеть как оно реализовано в других шеллах

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

Ага. Вот только эта строка состоит из исключений.

  • -exec ls -1 {} \; вместо | ls -1
  • -type вместо --type
  • f вместо казалось бы очевидного file
  • + вместо оператора сравнения
  • именованные аргументы в конце, а не после команды

Итого, мне нужно запомнить или найти в мане пять исключений для выполнения одного элементарного действия. Извините, в моей жизни есть дела поинтереснее.

Я лучше использую известную типовую конструкцию хорошего шелла, чтобы собрать пайп из простых, не перегруженных аргументами команд. Которые, кстати, имеют одинаковый синтаксис. Привет ps, tar, tr. И которые благодаря хорошему шеллу могут себе позволить делать что-то одно. Привет, юниксвей и find -delete (а зачем тогда rm?), и ls --sort (а зачем тогда sort?).

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

ls файлов больше мегабайта

Угу. И возвращает список полных путей.

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

Да я ж говорю - давно пользуюсь, знаю, но хочу больше вимовости)

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

У меня нет fish, проверить, что там выдает твой пример я не могу.

Если речь идет о выводе полного пути и имени для файлов больше указанного размера, тогда достаточно использовать только первую часть:

find /var/log/ -type f -size +1M

ls –sort

Я sort’ом данные не имеющие отношения к ФС сортирую.

Похоже ты пытаешься представить это как fish vs anything, а я отталкиваюсь от распространенности.

В собственном маня-мирке можно использовать, что угодно, но потом ты оказываешься через пару джампхостов на сервере, без привилегий, доступа в интернет и лишь с набором posix или coreutils.

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

У меня нет fish, проверить, что там выдает твой пример я не могу.

На примере powershell.

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

но потом ты оказываешься через пару джампхостов на сервере, без привилегий, доступа в интернет и лишь с набором posix или coreutils.

лучше коротко и честно скажи «после успешного запуска шеллкода» — и там понятно придется пользоваться чем дают, а не выяснять какой шелл мог бы быть лучше

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

-gt это вырвиглазное говно

а еще никуда не годится то, что для проекции (т.е. .FullName) нужно поставить скобочки

уж если хочется красиво, так сразу можно брать LINQ в интерпретаторе, только добавить туда запись в файлы, их атрибуты, атрибуты процессов и т.п.

либо sql вместо linq

SELECT fullname FROM files WHERE dir=here() and length>1*mb()
a--
()
Последнее исправление: a-- (всего исправлений: 2)
Ответ на: комментарий от Siborgium
osqueryi 'SELECT path FROM file WHERE path LIKE "/etc/%%" and size>123456'
+------------------------------------+
| path                               |
+------------------------------------+
| /etc/ImageMagick-6/mime.xml        |
| /etc/alternatives/awk              |
| /etc/alternatives/c++              |
| /etc/alternatives/cc               |
| /etc/alternatives/cli              |
| /etc/alternatives/cpp              |
| /etc/alternatives/djview           |
| /etc/alternatives/editor           |
| /etc/alternatives/f77              |
| /etc/alternatives/f95              |
| /etc/alternatives/gnuplot          |
| /etc/alternatives/gnuplot.gih      |
| /etc/alternatives/infobrowser      |
| /etc/alternatives/js               |
| /etc/alternatives/nawk             |
| /etc/alternatives/pager            |
| /etc/alternatives/php              |
| /etc/alternatives/rlogin           |
| /etc/alternatives/rsh              |
| /etc/alternatives/unrar            |
| /etc/alternatives/view             |
| /etc/alternatives/wine64           |
| /etc/alternatives/www-browser      |
| /etc/alternatives/x-window-manager |
| /etc/lynx/lynx.cfg                 |
| /etc/mono/browscap.ini             |
| /etc/ssh/moduli                    |
| /etc/ssl/certs/ca-certificates.crt |
| /etc/ssl/certs/java/cacerts        |
+------------------------------------+

но тормозит она зверски, поскольку видимо нет у нее оптимизации пройтись только по 1 директории

a--
()
Последнее исправление: a-- (всего исправлений: 1)
Ответ на: комментарий от Ja-Ja-Hey-Ho

Не особо логично, согласен.

Но всё ещё 5:1 не в пользу баша.

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

-gt это вырвиглазное говно

а еще никуда не годится то, что для проекции (т.е. .FullName) нужно поставить скобочки

Я не про «хорошо» или «плохо». Мне работу работать, а не эстетствовать.

Я про то, что один раз узнав конструкцию $a -gt $b, я могу её применять для сравнения размеров файлов, длин строк, количества процессоров, пользователей, виртуальных машин и вообще чего угодно, с чем я работаю в этом шелле. Аналогично, если код возвращает объект, то зная про (some code).property я могу обратиться к любому свойству любого объекта, всегда.

Где, кроме find, мне пригодится знание конструкции -size +1M? Нигде.

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

писать на фише скрптуху
Friendly Interactive SHell
скрптуху
Interactive

Это ⬇️ тогда зачем?

Улучшение языка сценариев

Наверное авторы фиша не знаю, что он Interactive. Объясни им, а то фигнёй страдают.

:thinking:

Как там в 90-х? Эмодзи ещё не изобрели?

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

Это ⬇️ тогда зачем?

Улучшение языка сценариев

Очевидно, непосредственно для интерактивного пользователя. Зачем интерактивному пользователю отправлять свои скрипты на какие-то машины где непонятный шелл?

Как там в 90-х? Эмодзи ещё не изобрели?

Эмодзи давно изобрели. Σ(-᷅_-᷄ ๑)

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

Мне работу работать, а не эстетствовать.

можно И работать, И эстетствовать — правда вот сходу из более-менее приличного я вспомнил только osquery, которая неидеальная, так как сделана на основе sqlite3 с его динамической типизацией головного мозга (или даже чем-то похуже)

Где, кроме find, мне пригодится знание конструкции -size +1M? Нигде.

твое объяснение неполноценности (inferiority) bash+find правильное, но osquery такой неполноценностью для чисел не страдает, и для строк тоже

давай рассмотрим с похожей точки зрения powershell vs. osquery

1. powershell умеет сравнивать через -gt и строки, и числа?

2. powershell умеет сравнивать через -gt другие типы данных?

Нигде.

чисто поспорить: так делают очень часто в языках уровня java; например

MyCollection c2 = c1
         .whereSizeMoreThan(100).AND().whereSizeLessThan(200)
    .OR().whereSizeMoreThan(300).AND().whereSizeLessThan(400);

либо даже так

MyCollection c2 = c1
         .whereSize(+100).AND().whereSize(-200)
    .OR().whereSize(+300).AND().whereSize(-400);

плюс тут в том, что парсить не нужно (но, скорее всего, это указывает на неполноценность языка — туда не завезли expression trees, которые имеются в LINQ)

a--
()
Последнее исправление: a-- (всего исправлений: 9)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.