LINUX.ORG.RU

zsh или bash

 


0

1

Доброго утра народ. Подскажите вчём преимущество zsh перед bash? И если есть таковые , то почему по умолчанию в любом дистрибутиве linux идёт bash а не zsh?

Ответ на: комментарий от EXL

Про это не нескажу,ибо невладею такой информацией

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

как написал EXL особо ничего и не поменялась, и да для не осиляторов zsh, таких как я, есть fish

Silerus ★★★★
()
Ответ на: Оба говно от anonymous

А есть вообще оболочки без привязки к эмулятору терминала, а то вот такое г-вно просто вымораживает: \[\033[48;5;4m\]

Вчера пытался повесить backward-kill-word на Ctrl+Backspace, так мне пришлось в эмуляторе терминала (konsole) сначала замапить Ctrl+Backspace на какое-то г-вно \E[9;3~, а уже на него вешать backward-kill-word. Шёл 2017-й год...

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

А есть вообще оболочки без привязки к эмулятору терминала

Не в курсе, но если есть, то они очевидно мало где работают. Пример: cmd.exe

Ctrl+Backspace

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

anonymous
()

почему по умолчанию в любом дистрибутиве linux идёт bash а не zsh?

Ты же не думаешь, что выбор дефолтного шелла для дистрибутива основан на его крутости? Во фреебзд вообще tcsh был дефолтной оболочкой и ниче.

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

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

Тем не менее сам konsole прекрасно понимает все нажатые клавиши, но должен специально их портить, превращая в какую-то абра-кадабру, доставшуюся нам по наследству из 60-х (это было 50 лет назад, 50!)

Неужели нет нормальной оболочки без этих атавизмов?

полно клавиш, никак особо не унифицированных между эмуляторами

ну так я и спрашиваю: а зачем этот эмулятор вообще нужен? В иксах же все клавиши стандартизированы.

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

Тем не менее сам konsole прекрасно понимает все нажатые клавиши

Да, но в консоли клавиш нету.

но должен специально их портить, превращая в какую-то абра-кадабру, доставшуюся нам по наследству из 60-х (это было 50 лет назад, 50!)

Это кривое Sosnole, в нормальных эмуляторах C-BackSpace по умолчанию генерирует то же, что и BackSpace.

а зачем этот эмулятор вообще нужен?

Прочитай где-нибудь, что такое текстовый терминал.

В иксах же все клавиши стандартизированы.

Ещё раз: в текстовом терминале нет клавиш, там только символы.

anonymous
()

почему по умолчанию в любом дистрибутиве linux идёт bash а не zsh?

Потому что bash появился раньше и успел стать «стандартом». Наличие преимуществ у чего-либо (даже если там на голову выше) редко сподвигает людей что-то менять. Иначе давно бы умер jpg в пользу bpg и flif, не был бы де факто стандартом для lossy-кодирования убогий mp3, а были бы ogg vorbis, opus, aac. Чтобы что-то заменить на нечто чуть лучше, необходимо время. Или должен быть очень серьёзный качественный скачок. zsh преимущества перед bash имеет, но не является чем-то настолько революционным, чтобы все бросились менять дефолт.

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

в нормальных эмуляторах C-BackSpace по умолчанию генерирует то же, что и BackSpace.

konsole тоже по умолчанию генерирует для C-BackSpace и BackSpace одно и то же, только какой в этом смысл, а? Специально чтобы я не мог сделать удобный экшн на C-BackSpace как в остальных текстовых полях (адресная строка браузера, файл-менеджера)?

Ещё раз: в текстовом терминале нет клавиш, там только символы.

Ещё раз: а зачем этот терминал вообще нужен? Почему нельзя заменить связку из иксового эмулятора терминала и терминальной оболочки просто иксовой оболочкой?

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

Потому что bash появился раньше и успел стать «стандартом»

На целый год раньше. Просто Bash это GNU, вот и всё.

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

Ещё раз: а зачем этот терминал вообще нужен?

Чтобы программы в нём запускать.

Почему нельзя заменить связку из иксового эмулятора терминала и терминальной оболочки просто иксовой оболочкой?

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

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

Почему нельзя заменить связку из иксового эмулятора терминала и терминальной оболочки просто иксовой оболочкой?

Можно. Заменяй. Только сначала ответь, зачем.

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

Причём тут cmd.exe? Заменить можно (с переписыванием всего софта под новый интерфейс)? Можно. Всё можно, если очень захотеть. Потому и спрашиваю «зачем» — предположительные плюсы слишком незначительны по сравнению с обретённым геморроем.

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

переписать весь консольный софт

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

Я уверен, что уже должен быть такой эмулятор-оболочка. Не один же я такой умный, верно?

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

Причём тут cmd.exe

Вот при этом:

с переписыванием всего софта под новый интерфейс

Именно поэтому практически нельзя.

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

Потому что в эмуляторе терминала геморройно обрабатываются клавиши-модификаторы и чтобы добавить новый хоткей в баш, например, нужно сперва поменять маппинг в эмуляторе терминала (пример: Ctrl+BackSpace не рапознаётся по умолчанию). Как по мне, так эмуляция терминальных последовательностей тут просто лишняя. Мало того что это лишнее звено, так оно ещё и вносит ошибки.

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

Я уверен, что уже должен быть такой эмулятор-оболочка.

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

что даст воможность использовать нормальные хоткеи при вводе команд

У тебя никто не забирал такую возможность. Можешь хоть мультимедийные клавиши использовать (я так делал), даже в ядерном TTY (и так тоже делал).

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

Как по мне, так эмуляция терминальных последовательностей тут просто лишняя.

Если убрать последовательности, то не будет ни ввода, ни вывода, ничего. Иди читай, что такое терминал.

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

Потому что в эмуляторе терминала геморройно обрабатываются клавиши-модификаторы

На вопрос «зачем» отвечают «чтобы», а «потому что» — на «почему». Это разные виды причинно-следственной связи. Но в данном случае я могу понять в итоге зачем — чтобы тебе было легче замапить Ctrl+Backspace. Таких сочетаний не так много (действительно юзабельных) и большинству они не нужны. Стоит ли это написание целого комбайна (графическая программа со встроенным шеллом, в которую ещё и встроена эмуляция терминала для остального софта)? Если для тебя стоит — пиши. На мой взгляд, то что эмулятор терминала и шелл — отдельные программы — это очень хорошо и юниксвейна, и их объединения в единый комбайн очень не хотелось бы, это приведёт к куче реализаций (сейчас хоть bash как стандарт и zsh с fish как более мощные, ну и tcsh) и вечной несовместимости, при этом будет так, что в одном терминало-шелле нравится минималистичность собственно графического окошка (как в urxvt), а в другом — фичастость встроенного шелла, а перетащить одно в другое можно только переписав. Уж лучше пусть будет «костыль» для Ctrl+Backspace (в итоге ведь получилось сделать как хочется).

Мало того что это лишнее звено, так оно ещё и вносит ошибки.

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

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

Если убрать последовательности, то не будет ни ввода, ни вывода, ничего. Иди читай, что такое терминал.

Насколько я понял, он хочет совместить эмулятор терминала и шелл в один комбайн. При этом чтобы во время ввода команд он работал в одном режиме, а во то время, как на foreground'е находится какая-то программа (ssh, mc, да хоть bash) — в другом (в режиме уже эмуляции терминала как везде). Это вполне реализуемо. Но не стоит того.

Psych218 ★★★★★
()

Подскажите вчём преимущество zsh перед bash?

  • Правый PROMPT (автоматически скрывается, если перекрывается вводом);
  • Макросы, много макросов (собственно, это кому-то может показаться минусом, так как надо экранировать);
  • Автодополнение умеет разворачивать пути (вводим /h/r/.co/a/r → жмём Tab → получаем /home/r3lgar/.config/awesome/rc.lua);
  • Есть много плюшек;

почему по умолчанию в любом дистрибутиве linux идёт bash а не zsh?

Потому, что большинство скриптов в линуксах (в том числе для сборки софта из исходников) написано на bash, поэтому технически невозможно от него избавиться.

r3lgar ★★★★★
()
Последнее исправление: r3lgar (всего исправлений: 2)
Ответ на: комментарий от Psych218

переключение режимов между «эмулятором терминала» и «оболочкой»

О чём ты? Вот смотри. Я запускаю konsole, в нём запускается баш.

Когда я нажимаю Ctrl+Backspace сначала из иксов приходит событие, konsole его транслирует его в терминальную последовательность по выбраннму keytab файлу, потом эта последовательность попадает в bash, который отвечает за ввод обычного текста в терминал.

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

отдельные программы — это очень хорошо и юниксвейна, и их объединения в единый комбайн очень не хотелось бы, это приведёт к куче реализаций (сейчас хоть bash как стандарт и zsh с fish как более мощные)

Я уверен, что от шелла достаточно ввода команд с автодополнением. А скриптниг пусть другие программы выполняют: питон, перл, баш. Разве не юниксвейно? И делается легко. При желании можно даже придумать новый стандарт для автодополнения (D-Bus же внедрили, значит и это реально).

Пример: вот пишешь ты «echo 1 > 1.txt», потом жмёшь Ctrl+Backspace и оболочка моей мечты превращает это в «echo 1 > 1.». Потом жмёшь энтер и баш (или $TERM) это интерпретирует.

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

Чем тебя не устроило ^W?

Хочу чтобы ввод текста делался единообразно во всей системе. Например, в иксовых браузере, текстовом редакторе, файловом менеджере это всё делается на Ctrl+Backspace (да даже в винде на работе). А вот ^W в иксах закрывает окно или табу.

Глупо же, что в терминале не такие хоткеи, как в остальной системе.

(Кстати, я поставил Ctrl+C и Ctrl+V на копирование и вставку в эмуляеторе терминала, очень рекомендую.)

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

Я уверен, что от шелла достаточно ввода команд с автодополнением.

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

Пример: вот пишешь ты «echo 1 > 1.txt», потом жмёшь Ctrl+Backspace и оболочка моей мечты превращает это в «echo 1 > 1.».

То есть, ты просто хочешь забиндить Ctrl+Backspace на стандартный ^W (который так и работает, не представляю, как виндузятники без ^W обходятся). Это может сделать и обычный терминал. Тот же urxvt.

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

bash, который отвечает за ввод обычного текста в терминал.

Твоё главное заблуждение. Bash сам работает в эмуляторе и никаких хоткеев не знает.

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

Хочу чтобы ввод текста делался единообразно во всей системе. Например, в иксовых браузере, текстовом редакторе, файловом менеджере это всё делается на Ctrl+Backspace (да даже в винде на работе). А вот ^W в иксах закрывает окно или табу.

Я тоже хочу, чтобы ввод текста делался единообразно во всей системе. Поэтому у меня и в браузере ^W стирает слово, и в GTK тоже. В Qt правда нет (хз как там настроить это), но на Qt у меня только Hedgewars, а там ввод не нужен, так что не критично. Хотя в итоге это стало причиной использования toxic, а не qTox — со всем смириться могу, но с тем, что в программе, в которой постоянно пишешь текст, не работает ^W привычным образом, нет.

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

Глупо же, что в терминале не такие хоткеи, как в остальной системе.

ЛОЛШТО? Это в остальной системе не такие хоткеи, как в терминале.

(Кстати, я поставил Ctrl+C и Ctrl+V на копирование и вставку в эмуляеторе терминала, очень рекомендую.)

Сказочный долбо… кхм. Как ты теперь прерывания будешь слать без ^C?

Ctrl+C

Control+Insert

Ctrl+V

Shift+Insert

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

bash достаточно хорошо настроить

Ну так я и настроил, только это такое говно, что вообще не понятно, как оно до сих пор живо.

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

Поэтому у меня и в браузере ^W стирает слово, и в GTK тоже.

А в GTK3? Для второго у меня ещё валяется файл с моим творчеством, но вот как в третьем я не в курсе. Когда-то гуглил, но пять лет прошло, стопудово сломали всё.

В Qt правда нет

Насколько я помню, в Qt4 нужно было переконпелировать Qt :)

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

у меня и в браузере ^W стирает слово, и в GTK тоже.

Делись! У меня на GTK всего-то терминал, но всё равно интересно.

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

Как ты теперь прерывания будешь слать без ^C?

Вроде можно было переназначить stty, но это вариант только для локалхоста по очевидным причинам.

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

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

Ну хорошо, давай в моей оболочке сделаем как в имаксе: по нажатию на TAB будет запускаться лишп-скрипт, котрому будет доступно всё содержимое текстового поля и какой-нибудь контекстный объект с инфой о текущей директории и т.п. А скрипты можно будет выкладывать на гитхаб или в AUR, чтобы ньюфаги могли их бездумно переиспользовать.

А про скриптинг односторочников я уже придумал, смотри выше.

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

Как ты теперь прерывания будешь слать без ^C?

Во-первых, в том же эмуляторе терминала можно забиндить ^C на любой свободный хоткей, например Alt+C.

Во-вторых, в konsole, которым я пользуюсь, Ctrl+C работает как копирование если есть выделенный текст, а если нет выделенного - то шлёт ^C. (Но Ctrl+C нужно биндить на копирование в настройках, это не дефолтный хоткей.)

Control+Insert
Shift+Insert

Не хочу, спасибо.

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

Да, но вопрос только что такое «достаточно хорошо» и достаточно хорошо для чего и для кого.
Меню с управлением стрелками и с автокомплитом на удалённом хосте - вот это достаточно хорошо, это реальный кейс улучшающий продуктивность.

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

Bash сам работает в эмуляторе и никаких хоткеев не знает.

если я в .bashrc добавил строчку bind '"\e[9;3~": backward-kill-word', то кто выполняет этот самый backward-kill-word по нажатию Ctrl+Backspace? (мой эмулятор шлёт \e[9;3~ по нажатию Ctrl+Backspace)

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

кто выполняет этот самый backward-kill-word

Технически GNU Readline, но можно считать, что Bash.

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

А в GTK3? Для второго у меня ещё валяется файл с моим творчеством, но вот как в третьем я не в курсе.

Одна строка r3lgar> Делись! У меня на GTK всего-то терминал, но всё равно интересно.

gtk-key-theme-name = Emacs
В секции [Settings] в ~/.config/gtk-3.0/settings.ini

Если более хитро, конечно, не надо настраивать

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

на работе в иксплорере тоже настроил? Научишь?

У меня нет «иксплорера» на работе.

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