LINUX.ORG.RU

fish 2.5.0

 ,


3

3

Вышла новая версия командной оболочки fish (friendly interactive shell), цель разработчиков которой — создать более интерактивную и удобную альтернативу прочим оболочкам.

Основные изменения:

  • Клавиши Home, End, Insert, Delete, Page Up и Page Down теперь работают при использовании режима с Vi-подобными сочетаниями клавиш.
  • Для сборки новой версии на GNU/Linux требуется g++ 4.8 и новее либо clang 3.3 или новее.
  • Для Ubuntu 12.04, Debian 7 и 64-битных версий RHEL/CentOS 5 и 6 больше не будут публиковаться бинарные сборки.
  • При попытке выйти из оболочки при запущенных фоновых процессах будет появляться предупреждение (при повторной попытке фоновые процессы будут прерваны).
  • С помощью функции random теперь можно выбрать случайное значение из списка (list), сделать это можно с помощью задания аргументов start, stop и step. Также для этого можно использовать новую команду choice.
  • Добавлен режим сочетаний клавиш fish_hybrid_key_bindings, совмещающий Emacs-подобные и Vi-подобные сочетания клавиш.
  • При некорректном объявлении функции теперь возвращается ошибка, в fish 2.3.0 и 2.4.0 функция была бы объявлена в любом случае.
  • С этой версии fish больше не выводит предупреждение при обнаружении запущенной оболочки более старой версии.
  • Улучшена совместимость с Android, MSYS/mingw и Solaris.
  • Теперь test возвращает ошибку при попытке проведения численных операций над некорректными данными.
  • Параметры --authoritative и --unauthoritative функции complete объявлены устаревшими и удалены.
  • status теперь принимает подкоманды (subcommands).
  • Исправлена ошибка, вызывавшая выделение лишнего символа при выделении текста.
  • Исправлены недочёты с индексами списков.
  • Изменено поведение функции fish_mode_prompt, теперь это просто обёртка над fish_default_mode_prompt.
  • Команда alias, запущенная без параметров, теперь выводит список всех алиасов.
  • Функция complete теперь принимает пустые строки в качестве описаний, задаваемых параметром -d.
  • Функция command теперь может быть запущена с параметром -q (--quiet) при использовании параметра --search; использоваться эта функция может для того, чтобы узнать, присутствует та или иная команда в скрипте.
  • Аббревиатуры теперь могут быть переименованы командой abbr --rename.
  • Исправлены проблемы с копированием вывода команды help.
  • help теперь запускает браузер, определённый в переменной $fish_help_browser.
  • Устранены потери данных при слиянии истории.
  • При вводе команды с неверным синтаксисом значение переменной $status теперь становится равным 123.
  • Добавлена функция prompt_hostname, выводящая имя хоста.
  • Функция __fish_man_page теперь распознаёт подкоманды (subcommands). К примеру, при вводе git add и нажатии Alt + H будет выводиться справочная страница (man) для git-add, а не git.
  • Добавлена функция edit_command_buffer для редактирования буферов во внешних редакторах.
  • set_color теперь поддерживает режимы italic (курсив), dim (затемнение) и reverse (реверс).
  • Использование файловых систем, в которых блокировка файла происходит медленно, например некорректно настроенного NFS-раздела, теперь не скажется на производительности fish.
  • Улучшено дополнение команд для apt, fusermount, make, netctl-auto, nmcl, pygmentize и tar.
  • Добавлено дополнение команд для VBoxHeadless, VBoxSDL, base64, caffeinate, dconf, dig, dpkg-reconfigure, feh, launchctl, lxc, mddiagnose, mdfind, mdimport, mdls, mdutil, mkvextract, nvram, objdump, sysbench, tmutil.

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

★★

Проверено: jollheef ()
Последнее исправление: sudopacman (всего исправлений: 6)

дополнение команд

Зло!

Устранены потери данных при слиянии истории.

А как она работает с историей? У меня сейчас в баше каждая команда отдельно пишется, т.к. иначе полный дурдом.

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

Зло!

Без автодополнения команд с VirtualBox из терминала работать не очень комфортно, особенно если виртуальных машин много.

Deleted
()

Vi-style key bindings
создать более интерактивную и удобную альтернативу прочим оболочкам

знатно на ноль поделили

SjZ ★★★★★
()

Пока очень сыро, больше тянет на версию 0.2.5. Fish местами намного человечнее Zsh, но заменить его пока не может.

anonymous
()

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

Впрочем, это наверно фича fishа.

anonymous
()

При попытке выйти из оболочки при запущенных фоновых процессах будет появляться предупреждение (при повторной попытке фоновые процессы будут прерваны)

ненужно, фоновый процесс должен продолжать выполняться

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

Не должен. Чтобы он продолжал выполняться, его сначала нужно отсоединить от управляющего терминала.

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

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

Осиль экранирование.

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

Зло!

как смотришь, например, список установленных файлов для пакета? может быть версии помнишь)

а дополнение аргументов-файлов тоже зло?

anonymous
()

Какое-то время пользовался им, но из-за несовместимости синтаксиса c bash'ем всё же перешёл на zsh.

gasinvein ★★★
()
Последнее исправление: gasinvein (всего исправлений: 1)

Фигня для дошколят

/etc/profile.d без костылей посорсить не может. Функции свои же в bg отправлять не может. Референсное ненужно.

d_a ★★★★★
()

Вся суть fish одним постом

[d_a@home fish-2.5.0]$ sudo make uninstall
FISH_BUILD_VERSION = '2.5.0'
DESTDIR = "
localedir = '/usr/local/share/locale'
prefix = '/usr/local'
bindir = '/usr/local/bin'
sysconfdir = '/usr/local/etc'
datadir = '/usr/local/share'
docdir = '/usr/local/share/doc/fish'
mandir = '/usr/local/share/man'

Uninstalling fish from configured $prefix: /usr/local

Deleting programs: [ fish fish_indent fish_key_reader ] in /usr/local/bin
Deleting configuration: /usr/local/etc/fish/*

In 5 seconds, all data (includes functions, completions, tools) in
\t/usr/local/share/fish will be deleted!

If you put things there, stop now! \c
5 \c
4 \c
3 \c
2 \c
1 \c
...
... deleting /usr/local/share/fish/*

Deleting documentation: /usr/local/share/doc/fish/*

Deleting pkgconfig file: /usr/local/share/pkgconfig/fish.pc

Deleting \c
/bin/sh: -c: line 0: syntax error near unexpected token `('
/bin/sh: -c: line 0: `echo «[ „share/man/man1/fish share/man/man1/fish_indent share/man/man1/fish_key_reader $“] in \\c»'
make: *** [uninstall] Ошибка 1
d_a ★★★★★
()
Ответ на: комментарий от unt1tled

Пробовал этот шелл когда-то. Разницы с баш не заметил.

o_O я понимаю, если бы вы с каким-нибудь korn shell разницы не заметили. Может быть вам тогда не fish подсунули?

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

Анонимус жаловался, что пробелы в именах файлов ему мешают жить. Так я понял, что кавычки ему вообще избыточны, а экранировать нужно не только пробелы.

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

Разницы с баш не заметил.

да ладно

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

Это был неправильный анонимус, которому пробелы мешают.

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

Кстати, кто-нибудь в курсе, как работать с файлами, у которых в наименовании не только пробелы, но и кавычки? Вообще лажа, в bash не понятно как обходить такие моменты... Если нужно одну кавычку в кавычки взять, например.

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

Насколько я помню, он умеет меньше команд, чем bash и zsh. Отсюда и его нужность стремится к 0.

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

http://www.bash-scripting.ru/abs/chunks/ch05s02.html

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

\"
        придает кавычкам непосредственное (символьное) значение. В противном случае, кавычки означали бы конец выражения, передаваемого в качестве параметра команде echo.

        echo "Медведь"                       # Медведь
        echo "\"Медведь\" ... он сказал."    # "Медведь" ... он сказал.
mandala ★★★★★
()
Ответ на: \ от d_a

Бесконечно-положительной тебе кармы)!

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

Быстрая подсветка синтаксиса. Нативный поиск в истории по мере набора, который не тормозит в отличие от педальной реализации для zsh. Дополнение в целом тоже быстрее, иногда во много раз, а возможности примерно те же.

Больше пяти лет пользуюсь zsh, жду когда fish допилят.

anonymous
()

Да поймут меня правильно, «лучшая оболочка» - это мышка и море полезных, визуальных инструментов. А для перемещения файлов - Windows Commander.

Шелл - каких перделок к нему ни прикручивай, всё равно будет «тренажёром пальцев» с тренировкой памяти - флаги, пути, имена команд, экранирующие символы и т.п. В 21 веке больше нечем напрячь голову? Ну-ну...

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

Да поймут меня правильно, «лучшая оболочка» - это шелл и море полезных, консольных инструментов. А для перемещения файлов - Midnight Commander.

GUI - каких перделок к нему ни прикручивай, всё равно будет «тренажёром кисти» с тренировкой памяти - галочки в настройках, пути, названия менюшек, расположение кнопок и т.п. В 21 веке больше нечем напрячь голову? Ну-ну...

anonymous
()

Помню, как году в 2005 смотрел на этот shell и читал, что он вот-вот сможет стать альтернативой bash'у и zsh'у. Прошло 12 лет, я сменил 5 городов жительства, вырастил падчерицу, расстался с одной женой и начал жить с новой, а оно все еще «скоро может стать альтернативой». Кажется что-то с этим фишем не так.

ergil ★★★
()

А есть среди линух шелов какие-нибудь с C-подобным синтаксисом скриптов? Этот баш - ну просто вырвиглазки вырвиручки тем кто его придумал.

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

Быстрая подсветка синтаксиса.

Говорят, на длинных строках тормозит, так что не такая уж быстрая, но должно быть быстрее zsh-syntax-highliting.

Нативный поиск в истории по мере набора, который не тормозит в отличие от педальной реализации для zsh.

В чем заключается педальность?

Дополнение в целом тоже быстрее, иногда во много раз,

Кеширование включено? «Скомпилировать» пробовали? Может банально удаленного ответа ожидает?

а возможности примерно те же.

В fish дополнение не программируемое и нет тегов.

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

А есть среди линух шелов какие-нибудь с C-подобным синтаксисом скриптов?

Да, переходите на ноду, там всё есть.

require('shelljs/global');

if (!which('git')) {
echo('Sorry, this script requires git');
exit(1);
}

// Copy files to release dir
rm('-rf', 'out/Release');
cp('-R', 'stuff/', 'out/Release');

// Replace macros in each .js file
cd('lib');
ls('*.js').forEach(function(file) {
sed('-i', 'BUILD_VERSION', 'v0.1.2', file);
sed('-i', /^.*REMOVE_THIS_LINE.*$/, ", file);
sed('-i', /.*REPLACE_LINE_WITH_MACRO.*\n/, cat('macro.js'), file);
});
cd('..');

// Run external tool synchronously
if (exec('git commit -am «Auto-commit»').code !== 0) {
echo('Error: Git commit failed');
exit(1);
}


PS.

if (exec('git commit -am «Auto-commit»').code !== 0) {

Чёртова конина, ну [pre]-то за что?!

d_a ★★★★★
()

Воистину так!

Рыба — это не убийца Баша. Рыба — это хорошая альтернатива Баша.

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

никогда не любил избытоного синтаксического мусора подобных языков. как можно это рекоммендовать вместо лаконичного sh/bash? cd('lib'); вместо cd lib? да вам к психиатору нехудо бы заглянуть.

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

Нееееее... Возможно это предубеждение, но уж лучше баш, чем жопоскрипт на сервере.

Что до синтаксического мусора, то в языках общего назначения подобный синтаксис неизбежен.

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

В чем заключается педальность?

В основном в том, что работает только с историей. В fish оно какое-то более интеллектуальное.

Кеширование включено? «Скомпилировать» пробовали? Может банально удаленного ответа ожидает?

Всё включено, тормозят конкретные кривые комплишены: systemctl, apt, ещё вроде какие-то. Кэширование помогает, но до bash-completion и fish им далеко.

В fish дополнение не программируемое и нет тегов.

В смысле не программируемое? Там есть команда complete — погромируй что хочешь.

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

Именно для этого майкрасофт изобрела повершелл.

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

В основном в том, что работает только с историей. В fish оно какое-то более интеллектуальное.

А в fish как? Вроде бы тоже только с историей.

Всё включено, тормозят конкретные кривые комплишены: systemctl, apt, ещё вроде какие-то. Кэширование помогает, но до bash-completion и fish им далеко.

Фиг знает. У меня «на глазок» что bash, что fish, что zsh(даже без кеширования) одинаково быстро systemctl дополняют. Почему кривые?

В смысле не программируемое? Там есть команда complete — погромируй что хочешь.

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

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

А в fish как? Вроде бы тоже только с историей.

Нет, там оно предлагает серым цветом и обычные варианты дополнения, специально проверял только что.

Почему кривые?

Код посмотри. У меня есть большие сомнения, что zsh с нормальной скоростью может интерпретировать 100500 уровней вложенности parameter expansion. Безусловно, в bash-completion код тоже страшный, но хоть не тормозит.

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

Ну это не программирование автодополнения. Тут, видимо, тот случай, когда https://fishshell.com/docs/current/design.html#design-configurability :) Когда вдруг понимаешь, что спустя годы страшно даже открывать свой конфиг шелла, это решение авторов fish не кажется глупым.

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

А есть среди линух шелов какие-нибудь с C-подобным синтаксисом скриптов?

rc более-менее похож, но там интерактивности нема, можно просесть на задачах навроде «| while read line; .. $(( line + ... )); echo .. (read, арифметика, echo - внешние команды), а в целом, синтаксис приятнее остальных

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

Да поймут меня правильно, «лучшая оболочка» - это мышка и море полезных, визуальных инструментов.

Да все поняли, что ты mentally challenged, не надо оправдываться. Такие как ты могут жить нормально, просто тебе стоит заниматься в жизни делами попроще.

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

а что не так: накидал в теге acme | <полезная команда> - вот и «визуальные» инструменты, зачастую поудобнее это вашего терминала

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

Нет, там оно предлагает серым цветом и обычные варианты дополнения, специально проверял только что.

А, т.е. цвет только один.

Код посмотри. У меня есть большие сомнения, что zsh с нормальной скоростью может интерпретировать 100500 уровней вложенности parameter expansion. Безусловно, в bash-completion код тоже страшный, но хоть не тормозит.

Ну посмтрел. Максимум 3 уровня вложенности заметил и вряд ли именно это сильно влияет на скорость. Где-то у zsh был профайлер..

Тут, видимо, тот случай, когда https://fishshell.com/docs/current/design.html#design-configurability :)

Всем не угодишь. Мне fish не угодил как раз навязыванием авторского виденея.

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

Ну добавь комментариев.

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

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

Ну добавь комментариев.

Конфиг шелла — это код. А код надо рефакторить регулярно, чтобы не было страшно «спустя годы».

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

Зачем рефакторить то, что хорошо написано, тем более конфиг, почти что декларативщину.

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

Ни чем, судя по обсуждению велосипед какой-то с овальными колёсами. Про управление историей мне так ни кто и не ответил.

mandala ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.