Форум проекта Matuntu

Поддержка => Руководства и инструкции => Тема начата: ivm от 12 Сентября 2016, 12:36:32

Название: Командные оболочки UNIX
Отправлено: ivm от 12 Сентября 2016, 12:36:32
Командные оболочки UNIX (https://ru.wikipedia.org/wiki/Командная_оболочка_UNIX) -
Их так много, но в Linux чаще используется bash в качестве предустановленной командной оболочки.
Но можно установить zsh в качестве оболочки по умолчанию для отдельного пользователя:
chsh -s /bin/zsh 'your_user'
Название: Re: Командные оболочки UNIX
Отправлено: vita от 12 Сентября 2016, 12:50:01
В Википедии есть статья Сравнение командных оболочек (https://ru.wikipedia.org/wiki/Сравнение_командных_оболочек).
Заинтересовала Fish (https://ru.wikipedia.org/wiki/Friendly_interactive_shell) или Friendly Interactive Shell - это командная оболочка Linux нового поколения. Она разработана, чтобы облегчить пользователю выполнение команд, есть подсветка синтаксиса, подсветка правильных адресов файлов, быстрый поиск по истории, веб-конфигуратор, а также особый синтаксис скриптов. Это новая командная оболочка в Linux и её синтаксис не похож ни на одну из современных командных оболочек, а скорее на язык программирования Python.
Название: Re: Командные оболочки UNIX
Отправлено: vita от 12 Сентября 2016, 14:10:44
В официальном репозитории Ubuntu 16.04 есть пакет Fish версии 2.2, но имеется возможность установить более новую версию 2.3 из стороннего репозитория: sudo add-apt-repository ppa:fish-shell/release-2 -y sudo apt update sudo apt install fishВ терминале после ввода команды fishоткрылось приглашение в новую командную оболочку:
Цитировать
vita@Matuntu-X64  ~ fish
Welcome to fish, the friendly interactive shell
Type help for instructions on how to use fish
vita@Matuntu-X64 ~>
По Ctrl+D в терминале вернулась оболочка bash.
Будем изучать дальше возможности Fish.
Название: Re: Командные оболочки UNIX
Отправлено: ivm от 12 Сентября 2016, 14:49:10
По поводу всех альтернативных башу оболочек достаточно содержательное обсуждение на лоре (http://www.linux.org.ru/forum/talks/12264821). Полностью согласен с комментарием:
Цитата: Yur4eg 12.01.2016 16:36:13
А я когда-то увлекался тюнингом zsh, конфиг у меня был под двести строчек, альясики всякие, но давно перешел на баш, так как сисадминю, а в 99.9% случаях, если подключиться к удаленному серверу, то у рута будет баш.
Чаще всего линукс используется для администрирования, а здесь придётся работать в той оболочке, которая есть на сервере.
Так что не ст'оит привыкать к "удобствам".
Название: Re: Командные оболочки UNIX
Отправлено: alv от 12 Сентября 2016, 17:45:29
Чаще всего линукс используется для администрирования, а здесь придётся работать в той оболочке, которая есть на сервере.
Так что не ст'оит привыкать к "удобствам".
Если следовать этой логике, настоящий админ не должен привыкать ни к чему, кроме /bin/sh и vim-tiny: всего остального на сервере может не оказаться :)
Но мы вроде как не о серверах, всё-таки?
Название: Re: Командные оболочки UNIX
Отправлено: ivm от 13 Сентября 2016, 00:06:33
Интереса ради можно посмотреть на все доступные варианты командной оболочки.
Как обычно, а можно всех посмотреть? За просмотр денег не берут  ;)
Название: Re: Командные оболочки UNIX
Отправлено: vita от 13 Сентября 2016, 10:11:40
Мнение (http://www.linux.org.ru/forum/talks/12264821?cid=12265852) одного из лоровцев о применении альтернативных оболочек командной строки показалось интересным:
Цитата: nexfwall
Просто поделюсь своими впечатлениями, когда тоже бегал по альтернативным шеллам. Когда в последний раз тыкал шеллы, было так:

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, писать научился уже давно.
Название: Re: Командные оболочки UNIX
Отправлено: alv от 13 Сентября 2016, 11:29:47
Мнение (http://www.linux.org.ru/forum/talks/12264821?cid=12265852) одного из лоровцев о применении альтернативных оболочек командной строки показалось интересным:
Мнение показывает, что автор  забил на это задолго того, как хоть чуть-чуть в нём разобрался.
Хотел было написать коммент, но получилось очень много, так что в ближайшее время превращу коммент в памфлет :)
Название: Re: Командные оболочки UNIX
Отправлено: ivm от 13 Сентября 2016, 14:40:32
Что произойдёт в случае отказа от Bash в пользу другой оболочки при его отсутствии в системе с огромным количеством  скриптов, начинающихся с  #!/bin/bash?
Название: Re: Командные оболочки UNIX
Отправлено: vita от 13 Сентября 2016, 15:16:30
Нашла хороший рецепт для поиска прежних команд по введённым буквам.
Достаточно в файл ~/.inputrc вставить строки:
"\e[A": history-search-backward
"\e[B": history-search-forward
Такой файл в домашнем каталоге отсутствует, поэтому его нужно предварительно создать pluma .inputrcПосле сохранения файла поиск по буквам начнёт работать по табуляции.
Проверено в Matuntu-X64 в терминале с bash.
Название: Re: Командные оболочки UNIX
Отправлено: alv от 13 Сентября 2016, 15:42:06
Что произойдёт в случае отказа от Bash в пользу другой оболочки при его отсутствии в системе с огромным количеством  скриптов, начинающихся с  #!/bin/bash?
Когда я делал из LFS систему с Zsh и без Bash - у меня все системные скрипты начинались с
#!/bin/shКак по хорошему и должно быть.
В Ubuntu, кстати, все системные скрипты начинаются с ша-банга /bin/dash.
А dash - это чуть модернизированный шелл Альмквиста, который, в свою очередь, почти POSIX Shell.
Так что ша-банг /bin/sh - универсален, это симлинк на любой Борносовместимый шелл.

UPD. Кстати, пардон, ошибся - в Ubuntu все скрипты из /etc/ как раз с /bin/sh и начинаются. Как, по хорошему, и должно быть в любой системе.
А /bin/sh - симлинк на /bin/dash.
Название: Re: Командные оболочки UNIX
Отправлено: alv от 13 Сентября 2016, 15:46:26
Нашла хороший рецепт для поиска прежних команд по введённым буквам.
Да, есть такое. Когда-то писал даже про это (http://alv.me/nemnogo-o-bash-i-ego-nastrojkax/).
Это и есть один из нетривиальных способов прикручивания Zsh'евых фич к Bash'у. Согласитесь, что надо допереть, что за это отвечает не Bash, а Readline, и что надо править, стало быть, не bashrc, а inputrc.
Я в своё время не допёр - спасибо, Саша Баракин подсказал, aka Sach-kan, где тут собака зарыта :)
Название: Re: Командные оболочки UNIX
Отправлено: alv от 15 Сентября 2016, 17:34:04
Ну вот, сочинилось: Zsh и мифы о нём (http://alv.me/zsh-i-mify-o-nyom/)
Название: Re: Командные оболочки UNIX
Отправлено: ivm от 15 Сентября 2016, 23:58:26
Посмотрел я документацию по Zsh (https://wiki.archlinux.org/index.php/Zsh_(Русский)#.D0.9F.D0.BE.D0.B4.D1.81.D0.B2.D0.B5.D1.82.D0.BA.D0.B0_.D1.81.D0.B8.D0.BD.D1.82.D0.B0.D0.BA.D1.81.D0.B8.D1.81.D0.B0_.D0.BA.D0.B0.D0.BA_.D0.B2_Fish) и статью Делаем из zsh мороженку (http://dobroserver.ru/delaem-iz-zsh-morozhenku). Поскольку человек я реальный со всеми присущими людям недостатками могу забыть, что прописал в настройках. Сложилось такое ощущение, что если мне нужно будет запутать злого хакера, который попадёт на мой компьютер, то надо ставить Zsh и настраивать его под себя. Тогда уж точно никто и ничего не сможет сделать, не зная моих настроек. Но если я забуду, то компьютер станет кирпичом. Кое-что полезное для себя от Zsh я всё-таки нашёл, но предпочитаю иметь однозначную документацию, приемлемую для большинства.
Название: Re: Командные оболочки UNIX
Отправлено: alv от 16 Сентября 2016, 00:24:41
предпочитаю иметь однозначную документацию, приемлемую для большинства.
А вот по части документации Bash'у до Zsh'а - что до Гонолулу омарам: пользовательское руководство Стефенсона, плюс постоянно обновляемое оригинальное руководство Фальстада в сумме тянут страниц на тысячу. Не считая более мелких доков по частным вопросам. Ну и man-страницы тоже никто не запрещает.
Название: Re: Командные оболочки UNIX
Отправлено: Sam от 16 Сентября 2016, 01:12:37
Обкатываю с месяц один занятный дистрибутив.  PROMPT его терминала сразу напомнил zsh. Подумал об этом и выбросил из головы. А сегодня, заглянув сюда, решил всё же проверить, чем же это я пользуюсь. Оказалось таки да, там zsh по дефолту. Конечно, сразу +5 к ЧСВ :)
Но вообще это я к тому, что простому смертному категорически безразлично, какой там шелл. Установка, удаление, очистка, обновление и sudo vim путь_к_файлу - выполняются одинаково. Даже любопытно, сколько бы ещё месяцев прошло, прежде чем вариант используемой оболочки открылся, если бы не посмотрел. 
Название: Re: Командные оболочки UNIX
Отправлено: alv от 16 Сентября 2016, 02:05:55
Обкатываю с месяц один занятный дистрибутив.
Какой, если не секрет?
Но вообще это я к тому, что простому смертному категорически безразлично, какой там шелл. Установка, удаление, очистка, обновление и sudo vim путь_к_файлу - выполняются одинаково.
Нет. Как раз всё равно shell-скриптёру всё равно, потому что он всё равно будет писать на чистом шелле, если хочте выйти за пределы своего локального десктопа.
А вот простой человек, вроде меня, уже только на наборе пути к файлу экономит бессчётное количество ударов по клавишам. А если задействовать десяток zsh-специфичных фич (больше реально не нужно) - то разница в амортизации клавиатур будет на порядки :)
Название: Re: Командные оболочки UNIX
Отправлено: Sam от 16 Сентября 2016, 10:03:46
Какой, если не секрет?
Вот этот (https://distrowatch.com/table.php?distribution=apricity)
А вот простой человек, вроде меня, уже только на наборе пути к файлу экономит бессчётное количество ударов по клавишам. А если задействовать десяток zsh-специфичных фич (больше реально не нужно) - то разница в амортизации клавиатур будет на порядки :)
Я уважаю zsh, но если дело в амортизации клавиатуры, то из ФМ терминал в нужной папке открывается совсем её не касаясь. :) Без тысячестраничного руководства Стефенсона и Фальстада.
Suum cuique.
Название: Re: Командные оболочки UNIX
Отправлено: alv от 16 Сентября 2016, 11:43:14
Какой, если не секрет?
Вот этот (https://distrowatch.com/table.php?distribution=apricity)
Спасибо, понял, читал, руки не дошли глянуть. А надо бы - раз там сразу и Cinnamon, и Zsh по дефолту :)
ФМ терминал в нужной папке открывается совсем её не касаясь. :)
А если сразу после этого нужно перейти в другой каталог? Возвращаться в ФМ и там переходить?
Тогда мышь быстро самортизируется :)
Без тысячестраничного руководства Стефенсона и Фальстада.
Ну это для тех, кто таки собирается прыгать с парашютом и нырять с аквалангом. Кому достаточно просто прокладок - обходятся комментариями к конфигам. Даже к тёте Мане в общем-то обращаться не обязательно.
Название: Re: Командные оболочки UNIX
Отправлено: vita от 16 Сентября 2016, 13:43:21
Что произойдёт в случае отказа от Bash в пользу другой оболочки при его отсутствии в системе с огромным количеством  скриптов, начинающихся с  #!/bin/bash?

Проверила в cintu-midi-16041-3ts путём добавления в /.config/nemo исполняемых скриптов из Matuntu. В контекстном меню Nemo они не появились.
Привыкла к их применению, поэтому включаю их во всех все последние версии Matuntu.
Название: Re: Командные оболочки UNIX
Отправлено: ivm от 20 Сентября 2016, 00:55:58
Будем изучать дальше возможности Fish.
Всегда интересно иметь компанию. На компизомании (http://compizomania.blogspot.com/2016/09/fish-elementary-os.html#more) тоже самое решили. Вместе веселее будет.