LINUX.ORG.RU

В чём Разница между fish, zsh, bash, sh, csh, dash,

 , , ,


0

1

Добрый день, я бы хотел узнать, какие отличия между fish и другими оболочками. Возможность есть отличия в скорости, или переменные окружения другие, синтаксис, автодополние? Мне интересно, ведь, например nixos package manager несовместим с fish.



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

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

Да.

cocucka ★★★★☆
()
  • Fish — наркоманский синтаксис, несовместимый с POSIX, но значительная часть функциональности просто работает из коробки. Остальное легко добавляется небольшим количеством дополнений. Работает почти идеально и есть не просит.

  • Zsh — старше fish, (почти) POSIX-совместима. Также имеет обширную функциональность, сторонняя поддержка больше, чем у fish. Но чтобы добиться аналогичной fish функциональности, нужно приложить гораздо больше усилий, при этом всё равно так же хорошо работать не будет.

  • Bash — говно мамонта. Есть приблуды, чтобы придать ему человеческое лицо, но работают они ещё более криво, чем в zsh.

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

А можно как-то сделать fish posix совместиным? Работает он намного лучше zsh, и не так ограничен в функционале, как bash.

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

это и не нужно, просто юзай баш для сторонних скриптов а фиш для работы в консоле и своих скриптов. юзаю фиш уже пару лет

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

А можно как-то сделать fish posix совместиным?

Разве что свой форк запилить.

На самом деле в командной строке это не так важно. Главное не менять login shell для пользователя через chsh, а выбрать fish в настройках эмулятора терминала.

!! и !$ добавляются плагином, при этом замена производится сразу, а не после нажатия Enter, что намного удобнее, чем в bash.

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

не пользовался, но это странно что программа зависят от интерпретатора юзера. Может написать авторам?

TDrive ★★★★★
()

Use bash, Luke

bash - есть практически везде и достаточно удобен. Много документации по нём Идеальный балланс.

sh - есть вообще везде, но не столь удобен.

Остальные не так распространены и разной степени нестандратны

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

Нет, тут проблема в том, что этот пакетный менеджер требует определенных переменных окружения, а синтаксис для изменения этих переменные в fish несовместим с bash, под который nixpkg заточен. Поэтому автостарт nixpkg просто не работает с рыбой.

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

У меня всё работало с bash в качестве login shell и fish в эмуляторе терминала.

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

ну на баш профайл пофиг, а /etc/profile не вызывает проблем. это рабочий ноут, а не сервер если че.

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

Дело в том, что я устанавливаю fish, через chsh(так рекомендовано в archwiki). Поэтому естественно .bashrc и другие не работают. Да, вы мне, как раз посоветовали установить его через эмулятор терминала по умолчанию.

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

А, ну вот, тогда вообще проблем нету, не знал про этот плагин.

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

Работает он намного лучше zsh

Чем именно?

najlus ★★★★★
()

Если часто пишешь скрипты (как это делаю я), то лучше сидеть bash, так как не приходится держать в голове сразу два синтаксиса: синтаксис какой-то другой оболочки + bashевский, который всё равно нужен.

Если дофига хакер, то нужно сидеть в zsh и хвастаться на ЛОРе и гитхабе, как ты его круто настроил.

Ну а если консоль нужна редко, то сойдёт и fish.

Про остальные, если интересно:

dash - быстрая и очень урезанная оболочка, чтобы запускать скрипты быстрее. Совместима с POSIX, но не поддерживает фишки bash.

csh мёртв. tcsh, если вдруг где попадётся, — тоже мёртв.

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

dash - быстрая и очень урезанная оболочка, чтобы запускать скрипты быстрее.

Это не совсем так. Есть что работает быстрее, но bash потому и толстый, что на каждую конструкцию применяется своя функциональная реализация, которая работает быстрее по принципу смещения баланса память=код/размер. Но и даже если что-то интерпретируется быстрее, то надо понимать, что на bash код мощнее, а это для интерпретаторов очень важно, так как внутренности то работают на C.

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

Хм, у меня не получается забиндить unix-filename-rubout на C-w. Он просто игнорирует этот bind, будто его нет:

"\C-b": unix-filename-rubout
"\C-w": unix-filename-rubout
wandrien ★★
()
Ответ на: комментарий от wandrien

спасибо за подсказку, пойду в гугл поищу.

дернул черт опенка попробовать, пришлось другой шелл ставить. в баш конечно работает Alt+Backspace, но это неудобно весьма.

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

Не понял, что ты имеешь ввиду.

То, что на bash можно сделать одной командой, на posix shell придётся делать большим и медленным скриптом: массивы, обработка строк, регулярки. Есть вещи, которые сделать на dash практически не возможно - обработка вывода команд с zero-char разделителем записей, статус обоих команд pipe.

vodz ★★★★★
()

А еще ksh был. Кто помнит? Мой любимый шел был тогда, в NetBSD 1.6 :)

Вроде как все шелы обратно совместимы с борн шел aka sh. Хотя кто эти новомодные глисты знает, завелись и не выведешь теперь.

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

А еще ksh был. Кто помнит?

Не застал. Ставил как-то недавно, почитал мануал. Нашел несколько фич, отсутствующих в bash. Подивился да вернулся в bash.

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

так работает:

set bind-tty-special-chars off
"\C-w": unix-filename-rubout
"\e\C-?": unix-word-rubout
RebHat
()
Ответ на: комментарий от WinUsers

Что эти слова вместе значат? Ты его как дефолтный шелл в stdenv пихаешь или как? Как шелл может быть несовместим с PM?

t184256 ★★★★★
()

какие отличия между fish и другими оболочками. Возможность есть отличия в скорости, или переменные окружения другие, синтаксис, автодополние?

Гигантские, но они при этом все нестандартны и ужасны. Юзай xonsh, там хоть ЯП настоящий.

t184256 ★★★★★
()

Возможность есть отличия в скорости

какая разница, какая скорость в интерактивной оболочки? А для скриптов длиннее однострочников они все более-менее сравнимое говно

anonymous
()

sh это просто название файла, но обычно подразумевается, что под этим названием будет POSIX-совместимый шелл, по идее оно должно быть во всех unix-ах в т.ч. в линуксах

dash это реализация POSIX-совместимого шелла из дебиана, для запуска под именем /bin/sh

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

csh - дефолтный интерактивный шелл FreeBSD, довольно удобный в качестве интерактивного, для скриптов (как и баш) лучше не использовать но некоторые пишут

zsh fish и ещё куча разных *sh - нестандартные шеллы для любителей, их много разных, разбираться в них незачем

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

set bind-tty-special-chars off

С этим разобрался. readline слишком «умная».

stty werase undef после релога не работает клавиша «s».

Всё-таки интересно, с чем это связано. На stackoverflow.com тоже упоминалась эта ситуация, но нигде нет объяснения.

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

Когда я говорю, что nixpkg несовместим с fish, я имею в виду, что если вы скачаете nixpkg с официального сайта https://nixos.org/download.html#nix-quick-install и установите, то после установки он у вас просто не будет работать. Причём fish при этом установлен через chsh.

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