LINUX.ORG.RU
ФорумTalks

Польза и вред альтернативных шеллов. Стоит ли переходить с bash на что-то ещё?

 , , , ,


3

2

Я знаю, что есть модные шеллы — zsh, fish например, которые вроде как круче, но уже давно пользуюсь bash даже без bash-completion. А вот теперь задумался, что дефолтный шелл всё-таки неидеален и стоило бы его перенастроить или вообще перейти на другой. А ещё есть tcsh, интересно, кто-то его использует ещё?

Да и эмулятор терминала, возможно, стоило бы сменить, только не знаю, на что. Сейчас пользуюсь Konsole, так как терминалы на vte (в тч Gnome Terminal и Terminal из XFCE) неприемлемы по причинам безопасности, но возможностей не хватает малость, например нету нормального сохранения и восстановления сессий — то есть имён вкладок и соответствующих им путей и корректного восстановления истории терминалов после перезагрузки. Так же с некоторыми терминалами есть проблема — они могут исполнить произвольный код просто при выводе на экран содержимого файла без экранирования или потенциально даже при ls или find на директории со специально подобранными именами файлов. Хотелось бы такой эмулятор терминала, в котором esc-последовательности строго ограничены пределами содержимого открытой вкладки, не позволяя изменить, например, её имя.

Кстати ещё есть такой эпический баг-фича: паттерны типа *.txt при раскрытии могут привести к неожиданным последствиям, если забыть поставить перед ними два дефиса точку со слешем. Интересно, в альтернативных шеллах эта проблема решена как-то?

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

Пользуясь случаем, задам вопрос: А как переопределить тупой переход вверх/вниз по истории на Shift+Up Arrow/Shift+Down Arrow?

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

Не могу подобрать комбинацию. Вообще тебе нужны next-history (C-n по дефолту) и previous-history (C-p), а весь список есть по bind -l, help bind. Говорят что узнать какая будет последовательность можно через C-v и потом нажать комбинацию в терминале, и он выведет ^[[A например, значит в .inputrc будет \e[A. Но как поймать именно шифт-с-чем-то я не понял.

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

На zsh смени.

Попробовал запустить zsh с пустым конфигом, {a..z} не раскрывается, а в баше раскрывалась, например.

а удобные плюшки есть

А нужны ли мне эти плюшки, если есть и недостатки? А если бы в zsh не было недостатков, почему bash идёт почти везде по дефолту?

Вообще оно так и должно быть by design

Можно при раскрытии добавлять ./ просто в начало каждого имени.

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

А нужны ли мне эти плюшки, если есть и недостатки?

Недостатков нет у zsh перед bash. Разве что дефолтный конфиг. Но нужно юзать не дефолтный.

А если бы в zsh не было недостатков, почему bash идёт почти везде по дефолту?

Потому что он появился раньше. «Сложилось исторически», что называется. Куча скриптоты на него завязана и т. д.

А если всё устраивает и лень настраивать, то да, смысла нет менять. Только к чему тогда вообще спрашивать? ☺

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

Переходи и не мучай себя. Сильно облегчает работу с терминалом.

А на что конкретно? Может вообще не tcsh или mksh?

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

Вы даже не описали, для чего вы пользуетесь Башем, а спрашиваете, не нужно ли вам его на что-то сменить. Ничего, кроме «а у меня *sh, рекомендую», так в ответ не получить.

эмулятор терминала
нету нормального сохранения и восстановления сессий — то есть имён вкладок и соответствующих им путей и корректного восстановления истории терминалов после перезагрузки

После перезагрузки чего?

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

После перезагрузки чего?

А чего бывает перезагрузка? Перезагрузка компьютера, конечно. Меня немного задолбало после каждой загрузке в Konsole заново открывать нужные мне вкладки и переименовывать их. Ну и к просто закрытию окна Konsole и повторному открытию тоже относится.

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

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

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

А как переопределить тупой переход вверх/вниз по истории на Shift+Up Arrow / Shift+Down Arrow?
Но как поймать именно шифт-с-чем-то я не понял.

В URxvt <S-Up>: ^[[a, <S-Down>: ^[[b; в XTerm’е — <S-Up>: ^[[1;2A, <S-Down>: ^[[1;2B.

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

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

Перезагрузка компьютера, конечно. Меня немного задолбало после каждой загрузки

А вы как часто его перезагружаете? Может быть, корень проблемы здесь, и вы не ту задачу решаете?

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

А вы как часто его перезагружаете?

Когда как, в среднем примерно около раза в месяц.

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

пользуюсь bash даже без bash-completion

господи упаси мою душу грешную

я бы посоветовал поставить fish. работает идеально из коробки. если нужно source'ить сложный .profile, то нужно чуть подкостылить.

такой эпический баг-фича

так и должно быть же

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

Конфиг можно взять чей-нибудь, а донастроить уже по настроению.

Еще можно сделать zsh-newuser-install.

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

У zsh единственная киллер-фича, — удобное автодополнение по табу

Не единственная, а самая яркая.

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

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

emulate -LR zsh?

Самая главная фича fish, ИМХО, это то, что разбивка на слова не производится при вставке переменных.

В zsh тоже так, но можно отключить.

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

Попробовал запустить zsh с пустым конфигом, {a..z} не раскрывается, а в баше раскрывалась, например.

Надо {a-z}.

salsa
()

Перешёл на zsh чисто на попробовать. Ну, ещё у меня в bash'е часто почему-то портился терминал и после этого когда я нажимал ctrl+L (очистить терминал), то вместо прокрутки всё и вправду очищалось.

Пару часиков пришлось помучиться, чтобы заставить его таки вести себя как bash с его readline'ом (привык к комбинациям клавиш из emacs). В итоге всё нормально. на баги с порчей терминала больше не натыкался. Пользуюсь минимумом наворотов.

jeuta ★★★★
()

Shell это shell. Вопрос вида «А стоит ли менять twm на KDE?».

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

Вообще ksh появился раньше и bash именно оттуда утянул большинство фич.

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

Лечится этими строками в ~/.inputrc

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

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

Я использую zsh можешь попробовать ещё fish.

Я в курсе, но что такого может zsh, чего не может баш? А у fish я так понял, возможностей даже поменьше чем у баша.

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

но что такого может zsh, чего не может баш?

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

А у fish я так понял, возможностей даже поменьше чем у баша.

У fish ещё больше штуковин, чем в zsh.

sudopacman ★★★★★
()

Пытал несколько раз fish и zsh с целью замены bash в плане интерфейса (автокомплит и т.д.).

Ерунда какая-то.

Два плюса обнаружились у zsh: 1. возможность иметь PS1 справа. Удобно, при переключении в vi-mode; 2. раскрытие путей типа /e/p в /etc/php5.

В остальном bash удобнее. Особенно автокомплит. В zsh предлагается выбрать в менюшке (а-ля вимосвское wildmenu), которая пропадает при esc. В bash список вариантов висит текстом и всегда можно на него взглянуть.

Больше всего мне не понравилось в zsh - его непонимание intuprc. Иметь два схожих конфига это как-то перебор. А без inputrc жизнь не очень. Простой пользователь может и не заметит, но разработчику плюшек настроенного readline будет не хватать.

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

нормальный автокомпит

Баш умеет.

подсветку синтаксиса

Это прикольно, но достаточно бестолково.

можно не писать cd, а просто название каталога

Баш умеет.

И исправлять баш умеет.

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

нормальный автокомпит

Баш умеет.

Что, прям чтобы табом можно было тыкать и он выбирал между вариантами? И чтобы когда вводишь команду, можно было стрелками искать какие команды начинались на то сочетание, которе ты ввёл?

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

Больше всего мне не понравилось в zsh - его непонимание intuprc.

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

Может просто настроить и библиотеку zsh и пересобрать остальной софт с ней вместо readline (в тч и bash)?

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

Я точно знаю, что это всегда было в freebsd, причем не встроено в tcsh, а точно также было забиндено для всех через /etc/csh.cshrc. Я этого тогда не понимал, и думал, что это фича tcsh, и это была одна из тех нескольких причин, почему я юзал бсду вместо линукса.

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

табом можно было тыкать и он выбирал между вариантами?

Ну да. Можно и шифт-табом - в обратную сторону.

Можно даже так: сначала показать все варианты, а только потом начинать перебор.

И чтобы когда вводишь команду, можно было стрелками искать какие команды начинались на то сочетание, которе ты ввёл?

Можно. Вводишь `ht`, тыц стрелку вверх, а он тебе `htop`. Тыкая вверх/вниз можно перебирать следующие/предыдущие варианты.

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

библиотека вполне может быть лучше

Как я понял по отзывам, сложно быть хуже readline. :) Но при его неиспользовании вся суть теряются. Тут либо все используют, либо ну его лесом.

пересобрать остальной софт с ней вместо readline

Пересобирать придётся слишком много - тот же vim, например. Да и проще тогда просто два конфига таскать. В обоих случаях, на мой взгляд, использования zsh того не стоит.

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

Пересобирать придётся слишком много - тот же vim, например.

А в нём-то зачем readline? Если только для командной строки, которая по ":", то вряд ли ты в ней используешь больше чем стрелки вперёд-назад.

Да и проще тогда просто два конфига таскать.

А что в этом плохого-то?

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

В остальном bash удобнее. Особенно автокомплит.

Нет.

которая пропадает при esc.

Как забиндишь — так и будет.

В bash список вариантов висит текстом и всегда можно на него взглянуть.

В zsh тоже так можно. ЕМНИП, даже есть настроечка, чтобы автодополнение было «как в bash».

Больше всего мне не понравилось в zsh - его непонимание intuprc.

Это да. Для людей, проводящих в zsh больше времени, чем в других шелах — это оправданная «жертва». И zsh без zle — не zsh.

А без inputrc жизнь не очень. Простой пользователь может и не заметит, но разработчику плюшек настроенного readline будет не хватать.

Много где приводимая цитата:

Zsh does not use readline, instead it uses its own and more powerful zle.

Мой ux, слова «more powerful» подтверждает. Например, можно редактировать в несколько строк. Однострочники в ширину терминала теперь в прошлом. В readline тоже можно, но через вызов внешнего редактора.

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

Это прикольно, но достаточно бестолково.

Тоже не большой любитель подсветки не по делу, но одну фичу все же использовал: чтобы, при автодополнении, файлы подсвечивались теми же цветами, что в ls.

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

Ну да. Можно и шифт-табом - в обратную сторону.
Можно даже так: сначала показать все варианты, а только потом начинать перебор.

А варианты по hjkl перебирать? А поиск по вариантам?

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

Пересобирать придётся слишком много - тот же vim, например.

Не придется.

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

к tcsh привык, а так fish нравится

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

emulate -LR zsh

У меня щас нет zsh. Что оно делает?

В zsh тоже так, но можно отключить.

Да ладна? Надо потом поглядеть, с умолчальным шеллом.

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

Вот это уже лучше.

Теперь другая проблема: вот бы везде был zsh...

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

для командной строки, которая по ":"

Ага. :)

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

В том-то и дело, что нет. Я часто использую, например, стрелки вверх-вниз забинденные в `inputrc`.

А что в этом плохого-то?

Избыточность.

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

чтобы автодополнение было «как в bash».

Тогда в чуть zsh? :)

Мой ux, слова «more powerful» подтверждает.

Тут вы меня не поняли. Под «разработчиком» понимался человек использующий разные утилиты в процессе разработки на различных языках (я не имел в виду shell). Часто такие утилиты используют readline. Например, mysql и т.д.

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

А варианты по hjkl перебирать?

В баше нет интерактивного меню поэтому буквенные кнопки нельзя перехватить. Разве что в vi-mode, но я с ним не экспериментировал.

А поиск по вариантам?

Поиск по автодополнению? Такого нет.

Разве набор команды это не есть поиск? :)

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

Zsh does not use readline, instead it uses its own and more powerful zle.

А почему этот more powerful zle не используется в других программах кроме zsh? Или используется?

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

А почему этот more powerful zle не используется в других программах кроме zsh? Или используется?

Вангую, что это просто их велосипед из-за того, что readline под gpl (причём не lesser), в то время как zsh -- м-ай-ти.

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

Вангую, что это просто их велосипед из-за того, что readline под gpl (причём не lesser), в то время как zsh — м-ай-ти.

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

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

Тогда в чуть zsh? :)

Что? :)

Тут вы меня не поняли. Под «разработчиком» понимался человек использующий разные утилиты в процессе разработки на различных языках (я не имел в виду shell).

Я понял правильно, но повторюсь:

Для людей, проводящих в zsh больше времени, чем в других шелах/утилитах — это оправданная «жертва».


Часто такие утилиты используют readline.

А те, что пофичастее, предпочитают не использовать..

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