Автор Тема: Командные оболочки UNIX  (Прочитано 13691 раз)

Оффлайн ivm

  • Ветеран
  • *****
  • Сообщений: 3072
  • Что бы ни случилось, всё будет хорошо!
Командные оболочки UNIX
« : 12 Сентября 2016, 12:36:32 »
Командные оболочки UNIX -
Их так много, но в Linux чаще используется bash в качестве предустановленной командной оболочки.
Но можно установить zsh в качестве оболочки по умолчанию для отдельного пользователя:
chsh -s /bin/zsh 'your_user'

Оффлайн vita

  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 4788
  • Да будет свет!
Re: Командные оболочки UNIX
« Ответ #1 : 12 Сентября 2016, 12:50:01 »
В Википедии есть статья Сравнение командных оболочек.
Заинтересовала Fish или Friendly Interactive Shell - это командная оболочка Linux нового поколения. Она разработана, чтобы облегчить пользователю выполнение команд, есть подсветка синтаксиса, подсветка правильных адресов файлов, быстрый поиск по истории, веб-конфигуратор, а также особый синтаксис скриптов. Это новая командная оболочка в Linux и её синтаксис не похож ни на одну из современных командных оболочек, а скорее на язык программирования Python.
Делай с нами, делай как мы, делай лучше нас!

Оффлайн vita

  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 4788
  • Да будет свет!
Re: Командные оболочки UNIX
« Ответ #2 : 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.
Делай с нами, делай как мы, делай лучше нас!

Оффлайн ivm

  • Ветеран
  • *****
  • Сообщений: 3072
  • Что бы ни случилось, всё будет хорошо!
Re: Командные оболочки UNIX
« Ответ #3 : 12 Сентября 2016, 14:49:10 »
По поводу всех альтернативных башу оболочек достаточно содержательное обсуждение на лоре. Полностью согласен с комментарием:
Цитата: Yur4eg 12.01.2016 16:36:13
А я когда-то увлекался тюнингом zsh, конфиг у меня был под двести строчек, альясики всякие, но давно перешел на баш, так как сисадминю, а в 99.9% случаях, если подключиться к удаленному серверу, то у рута будет баш.
Чаще всего линукс используется для администрирования, а здесь придётся работать в той оболочке, которая есть на сервере.
Так что не ст'оит привыкать к "удобствам".

Оффлайн alv

  • Ветеран
  • *****
  • Сообщений: 1476
  • Это я и есть
    • Наш Блогосайт
Re: Командные оболочки UNIX
« Ответ #4 : 12 Сентября 2016, 17:45:29 »
Чаще всего линукс используется для администрирования, а здесь придётся работать в той оболочке, которая есть на сервере.
Так что не ст'оит привыкать к "удобствам".
Если следовать этой логике, настоящий админ не должен привыкать ни к чему, кроме /bin/sh и vim-tiny: всего остального на сервере может не оказаться :)
Но мы вроде как не о серверах, всё-таки?
За прекрасных дам!

Оффлайн ivm

  • Ветеран
  • *****
  • Сообщений: 3072
  • Что бы ни случилось, всё будет хорошо!
Re: Командные оболочки UNIX
« Ответ #5 : 13 Сентября 2016, 00:06:33 »
Интереса ради можно посмотреть на все доступные варианты командной оболочки.
Как обычно, а можно всех посмотреть? За просмотр денег не берут  ;)

Оффлайн vita

  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 4788
  • Да будет свет!
Re: Командные оболочки UNIX
« Ответ #6 : 13 Сентября 2016, 10:11:40 »
Мнение одного из лоровцев о применении альтернативных оболочек командной строки показалось интересным:
Цитата: 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, писать научился уже давно.
Делай с нами, делай как мы, делай лучше нас!

Оффлайн alv

  • Ветеран
  • *****
  • Сообщений: 1476
  • Это я и есть
    • Наш Блогосайт
Re: Командные оболочки UNIX
« Ответ #7 : 13 Сентября 2016, 11:29:47 »
Мнение одного из лоровцев о применении альтернативных оболочек командной строки показалось интересным:
Мнение показывает, что автор  забил на это задолго того, как хоть чуть-чуть в нём разобрался.
Хотел было написать коммент, но получилось очень много, так что в ближайшее время превращу коммент в памфлет :)
За прекрасных дам!

Оффлайн ivm

  • Ветеран
  • *****
  • Сообщений: 3072
  • Что бы ни случилось, всё будет хорошо!
Re: Командные оболочки UNIX
« Ответ #8 : 13 Сентября 2016, 14:40:32 »
Что произойдёт в случае отказа от Bash в пользу другой оболочки при его отсутствии в системе с огромным количеством  скриптов, начинающихся с  #!/bin/bash?

Оффлайн vita

  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 4788
  • Да будет свет!
Re: Командные оболочки UNIX
« Ответ #9 : 13 Сентября 2016, 15:16:30 »
Нашла хороший рецепт для поиска прежних команд по введённым буквам.
Достаточно в файл ~/.inputrc вставить строки:
"\e[A": history-search-backward
"\e[B": history-search-forward
Такой файл в домашнем каталоге отсутствует, поэтому его нужно предварительно создать pluma .inputrcПосле сохранения файла поиск по буквам начнёт работать по табуляции.
Проверено в Matuntu-X64 в терминале с bash.
Делай с нами, делай как мы, делай лучше нас!

Оффлайн alv

  • Ветеран
  • *****
  • Сообщений: 1476
  • Это я и есть
    • Наш Блогосайт
Re: Командные оболочки UNIX
« Ответ #10 : 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.
« Последнее редактирование: 15 Сентября 2016, 09:23:01 от alv »
За прекрасных дам!

Оффлайн alv

  • Ветеран
  • *****
  • Сообщений: 1476
  • Это я и есть
    • Наш Блогосайт
Re: Командные оболочки UNIX
« Ответ #11 : 13 Сентября 2016, 15:46:26 »
Нашла хороший рецепт для поиска прежних команд по введённым буквам.
Да, есть такое. Когда-то писал даже про это.
Это и есть один из нетривиальных способов прикручивания Zsh'евых фич к Bash'у. Согласитесь, что надо допереть, что за это отвечает не Bash, а Readline, и что надо править, стало быть, не bashrc, а inputrc.
Я в своё время не допёр - спасибо, Саша Баракин подсказал, aka Sach-kan, где тут собака зарыта :)
За прекрасных дам!

Оффлайн alv

  • Ветеран
  • *****
  • Сообщений: 1476
  • Это я и есть
    • Наш Блогосайт
Re: Командные оболочки UNIX
« Ответ #12 : 15 Сентября 2016, 17:34:04 »
Ну вот, сочинилось: Zsh и мифы о нём
За прекрасных дам!

Оффлайн ivm

  • Ветеран
  • *****
  • Сообщений: 3072
  • Что бы ни случилось, всё будет хорошо!
Re: Командные оболочки UNIX
« Ответ #13 : 15 Сентября 2016, 23:58:26 »
Посмотрел я документацию по Zsh и статью Делаем из zsh мороженку. Поскольку человек я реальный со всеми присущими людям недостатками могу забыть, что прописал в настройках. Сложилось такое ощущение, что если мне нужно будет запутать злого хакера, который попадёт на мой компьютер, то надо ставить Zsh и настраивать его под себя. Тогда уж точно никто и ничего не сможет сделать, не зная моих настроек. Но если я забуду, то компьютер станет кирпичом. Кое-что полезное для себя от Zsh я всё-таки нашёл, но предпочитаю иметь однозначную документацию, приемлемую для большинства.

Оффлайн alv

  • Ветеран
  • *****
  • Сообщений: 1476
  • Это я и есть
    • Наш Блогосайт
Re: Командные оболочки UNIX
« Ответ #14 : 16 Сентября 2016, 00:24:41 »
предпочитаю иметь однозначную документацию, приемлемую для большинства.
А вот по части документации Bash'у до Zsh'а - что до Гонолулу омарам: пользовательское руководство Стефенсона, плюс постоянно обновляемое оригинальное руководство Фальстада в сумме тянут страниц на тысячу. Не считая более мелких доков по частным вопросам. Ну и man-страницы тоже никто не запрещает.
За прекрасных дам!