LINUX.ORG.RU
ФорумTalks

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

 , , , ,


3

2

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

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

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

★★★★★

На zsh смени. Отличий от баша в плане того, что может быть «непривычно» практически нет, а удобные плюшки есть. Конфиг можно взять чей-нибудь, а донастроить уже по настроению.

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

В zsh не решена. По крайней мере по умолчанию. Вообще оно так и должно быть by design

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

Я давно закончил с экспериментами по подстройки окружения под себя, т.к. это неблагодарная трата времени. Проще подстроиться под среду. Все мои настройки как-правило сводятся к определению 2-3 алиасов и/или 2-3 клавиатурных комбинаций.

most-fucktum
()

не знаю на сколько это относиться к шеллу, но недавно на себе прочувствовал, что команда вида «cp ~/bla/bla/* .» может быть опасна если на клавиатуре не сработала точка, то последний файл пере запишется предпоследним.

surefire ★★★
()

Как эргономичные клавы. Дома под одеялком^W^W да по первости — конфетка. Ну если не привык, конечно, тогда — проклятие.

t184256 ★★★★★
()

терминалы на vte (в тч Gnome Terminal и Terminal из XFCE) неприемлемы по причинам безопасности

А что с ними такое?

Deleted
()
Ответ на: комментарий от most-fucktum

Я давно закончил с экспериментами по подстройки окружения под себя, т.к. это неблагодарная трата времени.

два чая

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

Вы про что? ЯННП.

* разворачивается во все файлы. То есть, просто списком подряд. Если в каталоге будет файл, c именем -r, то удалятся не только файлы (ожидаемое поведение, что каталоги останутся), но и каталоги рекурсивно. Чтобы избежать этого, вместо rm -опции * надо писать rm -опции -- *, чтобы аргументы далее не воспринимались как опции.

Psych218 ★★★★★
()

А я когда-то увелекался тюнингом zsh, конфиг у меня был под двести строчек, альясики всякие, но давно перешел на баш, так как сисадминю, а в 99.9% случаях, если подключиться к удаленному серверу, то у рута будет баш.

Yur4eg ★★
()
Ответ на: комментарий от most-fucktum

Я давно закончил с экспериментами по подстройки окружения под себя, т.к. это неблагодарная трата времени. Проще подстроиться под среду. Все мои настройки как-правило сводятся к определению 2-3 алиасов и/или 2-3 клавиатурных комбинаций.

Ещё 2 чая. Использую везде умолчальный шел (ksh/bash) и не парю себе мозги.

beastie ★★★★★
()
Ответ на: комментарий от most-fucktum

Я давно закончил с экспериментами по подстройки окружения под себя, т.к. это неблагодарная трата времени. Проще подстроиться под среду. Все мои настройки как-правило сводятся к определению 2-3 алиасов и/или 2-3 клавиатурных комбинаций.

люто плюсую

dormeur86 ★★★★
()

Лет десять назад, когда говорил zsh, то тут же бросались закидывать bash: того нет, этого нет. Нынче список того чего нет заметно поредел, поэтому не совсем очевидно зачем менять.

zloelamo ★★★★
()

Пользуюсь zsh с oh-my-zsh. Удобнее.

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

Не замечал такого вообще. Видимо, у меня нет файлов с названиями, которые могут быть восприняты как опции. Интересно, если создать файл с названием ".; sudo rm -rf /;", это будет работать?

Klymedy ★★★★★
()

Пердолистостью заболел штоле? Консоле и баша хватит всем.

Akamanah ★★★★★
()

не знаю по вопросу в топике, каково оно, но пользуюсь классикой, так сказать bash. Еще слышал про dash и что с ним система быстрее стартует что ли (OpenRC, вроде бы)

NK ★★★★★
()

Вопрос очень спорный, с одной стороны, говорят, что башизмы — это плохо, но почему, если баш стоит по-умолчанию на 95% линуксов? Потом эти же товарищи ставят какой-нибудь zsh, — и начинают использовать все его возможности на полную, возможности несовместимые ни с какими другими оболочками, *facepalm*.

Ретрограды, которые придерживаются POSIX-shell совместимости несомненно делают большое одолжение всем остальным, но в то же время лишают себя удобных инструментов.

Лично у меня проблемы при переносимости возникали не столько с командной оболочкой, сколько с конкретными утилитами. На моего jabber/irc бота на bash товарищи жалуются, что у них openssl отказывается запускаться, требуя указать путь до директории с корневыми ssl-сертификатами. Что ж мне теперь, под каждый дистрибутив подстраиваться?

Правильного ответа не смогу вам дать, но вроде т.к. bash мейнстрим, то лучше придерживаться его, а если вы перфекционист, то тогда POSIX-shell.

У zsh единственная киллер-фича, — удобное автодополнение по табу, что файлики можно пролистывать хоть стрелочками, с использованием ncurses. А так хз, зачем оно всё.

В CRUX с последним релизом завезли dash. Типа, оно быстрее. Но: от bash отказаться не могут, т.к. свои же скрипты завязаны на bash. Гениусы.

Не смотря на то, что консоль это по сути весь мой интерфейс, не вижу причин отказываться от мейнстримного bash.

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

Ты смешиваешь интерактивную оболочку и скрипты, из этого и ошибочные выводы.

zsh можно (если хочется) использовать для интерактивной работы, но писать на нем скрипты — только для себя.

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

$ ls -l /bin/dash /bin/bash
-rwxr-xr-x 1 root root 1029624 Nov 13  2014 /bin/bash
-rwxr-xr-x 1 root root  125400 Nov  8  2014 /bin/dash

$ ldd /bin/dash
	linux-vdso.so.1 (0x00007fff032bd000)
	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fbbe35e6000)
	/lib64/ld-linux-x86-64.so.2 (0x000055fc8b9ad000)

$ ldd /bin/bash
	linux-vdso.so.1 (0x00007ffc759c9000)
	libncurses.so.5 => /lib/x86_64-linux-gnu/libncurses.so.5 (0x00007f5fb337e000)
	libtinfo.so.5 => /lib/x86_64-linux-gnu/libtinfo.so.5 (0x00007f5fb3154000)
	libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f5fb2f4f000)
	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f5fb2ba6000)
	/lib64/ld-linux-x86-64.so.2 (0x00005645edb3a000)

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

, что файлики можно пролистывать хоть стрелочками, с использованием ncurses

fzf для этого есть

pawnhearts ★★★★★
()

Ты слишком стар для рок-н-ролла.
Баш - твой потолок, смирись

zolden ★★★★★
()

bash не менял. Ну что ещё нужно от шелла? Не хватает разве что нормального поиска команд как в vim.

А по поводу терминала - я открыл для себя tmux. Везде одинаков: хоть в konsole, хоть в vte, хоть в ssh. И умеет много чего. Сессии отлично сохраняет.

Kroz ★★★★★
()

...Кто-то еще пользуется не-zsh?

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

На zsh смени. Отличий от баша в плане того, что может быть «непривычно» практически нет, а удобные плюшки есть.

Пробовал месяц назад. Сразу же уткнулся в невозможность по умолчанию пользоваться привычными комбинациями Ctrl + стрелки влево/вправо.

AP ★★★★★
()

конечно стоит, все девки будут течь по тебе.

mos ★★☆☆☆
()

Больше всего в дефолтном баше (на самом деле это не баш, а readline) напрягает поведение вверх-вниз, которые не дополняют по введенным буквам, а просто мотают историю, просирая текущую команду. Лечится этими строками в ~/.inputrc:

"\e[A": history-search-backward
"\e[B": history-search-forward

Остальное вообще пофигу.

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

Нет конечно. Так бы и «file name» шел бы за два файла вместо одного. Считай, что glob как бы экранирует sh-важные символы (к которым "-" не относится).

Как с такими вопросами в модераторы берут?

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

разворачивается во все файлы

Так это нормально. Во всех шеллах так, ЕМНИП.

файл, c именем -r

А если имя файла «-r», то юзер как бы сам виноват. И получит он ровно то, что заслуживает.

r3lgar ★★★★★
()

zsh ... которые вроде как круче

Одной только лицензии уже достаточно. Поэтому использую zsh вместо bash

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

Так это нормально. Во всех шеллах так, ЕМНИП.

Ну я и говорю, by design

А если имя файла «-r», то юзер как бы сам виноват. И получит он ровно то, что заслуживает.

Ну… Файлы могли быть откуда-то распакованы, потом не посмотрены. Конечно всё равно сам виноват. Но помнить о таком стоит.

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

о! спасибо, очень интересная штука!

правда, нужно привыкать

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

reprimand ★★★★★
()

Самый ништяк – это fish. Не перенаворочен, как zsh, компактный, с хорошей докой. Настолько к нему прирос, что другое кажется УГ.

Hertz ★★★★★
()

Использую для всего, что длиннее однострочника python.

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

Ну… Файлы могли быть откуда-то распакованы, потом не посмотрены. Конечно всё равно сам виноват. Но помнить о таком стоит.

Нормальные пони люди таб жмут после *, чтобы развернуть маску. Лично я предпочитаю использовать {...}, конкретно перечисляя только то, что мне нужно.

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

fish с юзабельным конфигом из коробки

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

r3lgar ★★★★★
()

Для интерактивного режима - zsh - автодополнение и интерактивная раскраска команд (простыни по типу команд ffmpeg становятся куда читабельнее) решает.

Для скриптов - bash/sh в зависимости от того, будут ли эти скрипты запускаться на какой-нибудь экзотике.

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

Зачем брать чей-то конфиг к zsh, если есть fish с юзабельным конфигом из коробки?

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

Psych218 ★★★★★
()

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

saahriktu ★★★★★
()

Старость это: когда нужно перетереть с мужиками, прежде чем красноглазить.

aidaho ★★★★★
()

Просто поделюсь своими впечатлениями, когда тоже бегал по альтернативным шеллам. Когда в последний раз тыкал шеллы, было так:

Zsh очень похож на bash. Нет, даже так: это улучшенная версия bash. Нативная поддержка не только целых чисел, но и чисел с точкой. Улученные массивы и хэши(правда, ЕМНИП, их до сих пор нельзя вкладывать друг в друга, только по строковым ссылкам). Улучшенный глоббинг, который заменяет find в большинстве случаев. Мне бы очень хотелось, чтобы bash хоть что-то перенял... Но взамен мы получаем кучу костылей для поддержки всяких там tcsh, ksh и прочих маргинальных шеллов. И слишком сильную конфигурируемость. СЛИШКАМ МНОГА НАСТРОЕК. И каждая настройка довольно сильно меняет скриптинг(например, кто-то может отключить определение переменных как в ksh, и всё, приехали). И в итоге даже страшно писать скрипты, которые могут выйти за пределы локалхоста. Ибо конфигурация на конфигурацию не приходится.

К тому же zsh многими дистрибутивами поддерживается второстепенно(в принципе проблема и fish тоже). Archlinux - единственный известный мне дистрибутив, где он по умолчанию. Во всех остальных bash. Что довольно сказывается на поддержке некоторых терминалов этого шелла. Например, уведомления об окончании выполнения команды, в которые умеет gnome-terminal, не работают в zsh. Скорее всего потому, что они захардкодили, чтобы $SHELL соответствовал /bin/bash. Но реализуется это по сути через проброс функции для формирования приглашения используя окружение.

Самая главная фича fish, ИМХО, это то, что разбивка на слова не производится при вставке переменных. При передаче аргументов не надо каждый раз экранировать переменные кавычками("$PATH"), дабы не допустить случайного разбития строк, если каким-то волшебным образом там окажется пробел. Плюс ещё реализация функций там хороша, и «живое» автодополнение. Для всего остального бесполезен. И для более-менее продвинутого скриптинга тоже. Имеет всего 2 типа данных - строка(как обычно), и массив из строк. Поэтому, если вдруг понадобится написать нечто большее, чем запуск двух команд, получится такой же рассадник костылей как winetricks.

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

Выдохнул.

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

В zsh, ЕМНИП, есть предупреждение, когда глоббинг может привести к неожиданным последствиям. И отказывается выполнять команду.

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