LINUX.ORG.RU

Fish: дружественный интерактивный шелл


0

0

Fish это интерактивный командный интерпретатор, лицензированный под GPL, написанный для Linux и других POSIX-совместимых операционных систем. Fish основан на тех же идеях, что и другие UNIX шеллы такие как bash и zsh, но содержит множество улучшений в пользовательском интерфейсе и превращает скриптинг в пристойный язык программирования. Fish очень "крутой" шелл, полный увлекательных новых идей, исправляющий кучу старых проблем и имеющий хорошо продуманный дизайн.

I. Дизайнерские решения.

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

II. Пользовательский интерфейс.

* Интеграция с X clipboard: ^K, ^Y используют клипбоард,
* Syntax highlighting: сигнализируются проблемы с неправильными перенаправлениями ввода-вывода, несуществующие опции команд и другие,
* таб дополняет всё: возможно дополнить строки, содержащие wildcards и bracket expantions,
* fish без настройки поддерживает дополнения к около 150 командам
* все дополнения показываются с описанием их назначения
* все команды встроенные в fish имеют опцию -h/--help, показывающую краткое описание команды
* fish идёт с внешней командой (утилитой) mimedb, которая может использовать Freedesktop.org mimetype базу данных и файлы .desktop для идентификации дефолтного приложения для данного типа фалов. Эта утилита используется shellscript функцией open для открытия каждого типа файлов соответствующим дефолтным приложением...

скриншоты: http://roo.no-ip.org/fish/screenshots...

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

★★

Проверено: Shaman007 ()

fish идёт с внешней командой (утилитой) mimedb, которая может использовать Freedesktop.org mimetype базу данных и файлы .desktop для идентификации дефолтного приложения для данного типа фалов.

Ужос нах. Юмористы обязательно сделают дефолтным приложение rm -rf

Sun-ch
()

На скринах выглядят прикольно. Интересно, насколько сабж юзабелен в реальной жизни?

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

На первый взгляд, довольно приятная вещь. Ну, а дальше посмотрим.

Misanthrope
()

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

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

anonymous
()

Наверное неплохая штука, но мне, как заядлому башисту =), не удалось к нему привыкнуть, хотя признаюсь, я сидел в нём от силы час. К примеру я не смог заставить fish нормально показывать имена файлов (знаю, что utf - труъ, но у меня koi8, и в ближайшее время я не собираюсь что-то менять). Ну и где expansion, аналогичный башевскому `` (это обратные кавычки =)), я тоже не нашёл. А вот дополнения очень понравились.

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

Попробовал. Очень удобно!

Недостатки: медленный - видно как курсор по экрану бегает при перерисовке в цвете, память ессно есть не по-детски.

Но Очень удобно!

anonymous
()

Нахрен такие рыбные консервы!

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


и правда удобно. юникод тоже работает.
но у меня на history search сегфолтится.. редко, но метко

Johnny_Mnemonic
()

Wow! Рульняк - идеи В. Вагнера воплощаются!

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

>Кто-нибудь его пробовал? Как вам?

Задумка хорошая, но пока глючный он какой-то, часто в seg fault выпадает при простых операциях.

arax ★★
()

Блин.... ужос какой-то. 
В принципе интересная вещь, но уж больно странная.
Посидел минут 20 :), но до zsh ему еще далековато. И не в дополнениях дело. А в совместимости.
Резуме:
1. Падучий (ну эт понятно, бета пока)
2. Малость тормозный, хотя если поработать, вроде разгоняется
3. За каким-то ??? при наборе например help if зачем-то браузер!!! стратует (бред какой-то) чтобы помощь показать, хотя help fish показывает честный man.
4. mimedb душить. Неужели magic-а уже стало не хватать? Во всяком случае не для шела уж точно.
5. Язык какой-то не то не се (может я че-то не понял, но он вроде ни на что не похож, а значит под ним yи один шелл-скрипт работать не будет, нужно будет еще пару шелов сбоку держать, тогда нафига этот нужет?):
нахрена команда set вместо привычной export/setenv?
почему if без then или уж без скобок? Если уж такой python-о образный, то че уж двоеточие и tab-ы не использовать?
6. Каким боком строка приглашения менятся, чтобы например дату показывать или еще чего нужное?

В общем zsh еще поживет (к тому же скоро будет utf и будет всем щастье :) )

aka50
()

> echo О как!
О как!
> function cpwd --on-variable PWD; echo Current directory is $PWD; end
> cd ../
Current directory is /home

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

> Посидел минут 20 :), но до zsh ему еще далековато. И не в дополнениях дело. А в совместимости.

В том то и кайф, что оно не пытается быть совместимым... Совместимых у нас хватает.

> 5. Язык какой-то не то не се...

IMO, По сравнению с Bourne shell язык очень хорош.

> почему if без then или уж без скобок? Если уж такой python-о образный, то че уж двоеточие и tab-ы не использовать?

Мне всегда было интересно, какой сакральный смысл слова than в shell-скриптах. Просветите, а?

> 6. Каким боком строка приглашения менятся, чтобы например дату показывать или еще чего нужное?

$ # С этим как раз все хорошо
$ function fish_prompt; echo (date +%T) 'или что-то нужное! '; end
05:00:08 или что-то нужное! # И даже так
05:00:18 или что-то нужное! function fish_title; echo 'Это заголовок окна'; end



neru
()

>* Интеграция с X clipboard: ^K, ^Y используют клипбоард,

Дальше можно не читать. Все остальные опции из той же серии. Не знал, что свистелки и перделки теперь модно делать даже в шелле.

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

> В том то и кайф, что оно не пытается быть совместимым... Совместимых у нас хватает.

Не понял!
Он что, вместо того, чтобы переключаться в режим совместимости с posix при запуске как /bin/sh этого не делает, а тупо продолжает работать со своим синтаксисом?!

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

> а зачем его запускать как /bin/sh. busybox чтоли мало?

Открою для тебя америку, блин!
Любой нормальный шелл при вызове как /bin/sh работает в режиме строгой cовместимости с посикс, будь то bash, tcsh, zsh...
И, соответственно, в практически любом дистрибутиве /bin/sh это симлинк на один из этих шеллов.

anonymous
()

Прикольная штука, тока как в нём алиасы вешать? В остальном он мне нравится, тормозов не заметил, в сегфолт пока еще не падал.:)

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

говорят man fish работает, ботай, если понравился.

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

>прикольно. но рессурсы кушает сильно.

На жабе сляпан? А вообще - ресурсы нынче дешевы.

anonymous
()

хех, и для чего я ссылку на статью давал, видимо на лоре обитают одни гуру...

вот на этой странице
http://arstechnica.com/articles/columns/linux/linux-20051218.ars/3
находится весьма забавная синтаксическая консрукция:

"Posix shells have three related concepts that deal with executing a piece of code in a process other than the main shell. These are subshells, command substitutions, and process substitutions.
...
Process substitution is very similar to command substitution. It is used to send the output of a command into the calling command, much like command substitution, but with the difference that the output is not sent through commandline arguments but through a named pipe, with the filename of the named pipe sent as an argument to the calling program.

The Posix syntax for process substitution looks like this:

diff <(sort foo.txt) <(sort bar.txt)

The above command will create two procces substitution processes, sorting the files foo.txt and bar.txt respectively. The output of these processes will go into a pair of pipes. The diff command will be started with a pair of filenames as arguments, with each of these filenames poiting to the reading end of the process substitution pipes."

а забавна она тем, что на вход diff подаются stdout от двух команд через два пайпа одновременно, то есть вся работа по именованию/созданию/удалению временных пайпов делается _обычным_ posix шелом.
Никакими другими путями проделать тоже самое без явного именования/создания/удаления временных файлов/пайпов ручками сделать невозможно!
ну что, съели? :)

filin ★★
() автор топика

После быстрого проглядывания ссылки возник вопрос - имеет ли отношение этот fish к протоколу fish, используемому, например, в konqueror для доступа по ssh на удалённую машину?

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

> После быстрого проглядывания ссылки возник вопрос - имеет ли отношение этот fish к протоколу fish, используемому, например, в konqueror для доступа по ssh на удалённую машину?

я думаю, никакого, кроме названия

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

zsh это уже сто лет умеет :). Process substitution называется.

http://www.ugcs.caltech.edu/manuals/shells/zsh-4.2.5/zsh_53.html

$ cat t1.txt
test file
test line

$ cat t2.txt
test file
test super

$ diff t1.txt t2.txt
2c2
< test line
---
> test super

$ diff <(cat t1.txt) <(cat t2.txt)
2c2
< test line
---
> test super

$ cat test.sh
#!/bin/sh

echo $1
echo $2

$ ./test.sh 1ff.txt 2ff.txt
1ff.txt
2ff.txt

$ ./test.sh <(cat t1.txt) <(cat t2.txt)
/proc/self/fd/11
/proc/self/fd/17

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