Bash. Part 1

Tuesday, October 19 2021

Bash. Part 1

Что за звери и сколько же их?

Каждый, кто работает с UNIX системами и системами, базирующихся на UNIX так или иначе сталкивается с bash (или просто слышал). Что это такое? Менее известный как Bourne Again shell, (если просто) является одной из оболочек операционной системы (стандартная в GNU). Если подробнее - дальше :)

Оболочка операционной системы (shell)

Стоит обратить внимание на то, что оболочка операционной системы (shell) является интерпретатором, т.е. shell скрипты интерпретируются, а не компилируются. В чем разница? В том, что shell считывает скрипт построчно, парсит и ищет полученные команды в системе, а компилятор конвертирует программу в машинный код, исполняемый файл, который потом может быть использован в shell.

Типы shell

  • sh или Bourne Shell: оригинальный shell, который до сих пор используется в UNIX системах. Это простейший shell, маленькая программка с небольшим количеством возможностей. Хотя эта оболочка не является стандартной в большинстве UNIX систем (в iOS все же стандартная, оп!), она все же осталась и может быть спокойно использована.
  • bash or Bourne Again shell: Стандартная в GNU оболочка, как многие утверждают (intuitive and flexible), что чисто субъективно. Является по сути суперсетом над Bourne shell (sh), сетом кучи плагинов и аддонов. Отсюда можно сделать вывод, что полностью совместима с sh, но никак не наоборот. Включает в себя так же настройки из ksh.
  • csh или C shell: внезапно синтаксис оболочки напоминает Си.
  • tcsh или TENEX C shell: суперсет над C shell, как утверждают:

enhancing user-friendliness and speed. That is why some also call it the Turbo C shell.

  • ksh или Korn shell: Является суперсетом на Bourne Shell, созданным специально, чтобы вызвать одобрительные покачивания бородой у олд-фагов.
  • zsh или Z shell - для тех, кому всегда мало и хочется управлять из shell не только собственной ОС, но и гаражом соседа, хомячком, и настроением жены. Является надстройкой над Bourne Shell, которая включает в себя множество надстроек из ksh, tcsh, bash, немного магии. (на правах рекламы)

Это список наиболее известных оболочек UNIX систем. Для тех, кому все же хочется увидеть список все существующих, включая Windows, и их сравнение, советую посетить https://en.wikipedia.org/wiki/Comparison_of_command_shells

Список shell’ов, доступный на вашей машине можно посмотреть в файле /etc/shells:cat /etc/shells

Shellы по умолчанию находятся в директории /bin. Изменить shell по умолчанию можно так:

chsh /bin/zsh

Что отличает BASH от SH?

На каждом из этих пунктов я остановлюсь подробнее в следующих статьях:

  • sh является single-character shell command line; bash может работать как в single-character mode, так и в multi-character mode (подробнее). Т.е. параметры можно задавать не только одним символом;
  • Startup файлы (в следующей статье) - файлы, которые запускаются, при старте (и не только) bash;
  • Отличия в интерактивных и не интеракивных оболочках;
  • Наличие логических условий (унарные и бинарные выражения);
  • Арифметика;
  • Наличие alias - (назначаемых одно-словных псевдонимов, за которыми могут скрываться сложные команды);
  • Массивы;
  • Стэк дирректорий. Список недавно посещенных директорий;
  • Prompt (no comments);
  • The Restricted Shell - ограниченный мод, со множеством отключенных команд;

Следующая статья будет посвящена startup файлам и процессу запуска bash.


Ссылки:

Много информации отсюда. Требует базовых знаний UNIX


Тогда зачем это все?

Потому что почти все статьи, которые я встречал, отвечают на вопросы: КАК и ЧТО надо сделать, чтобы решить какую-то проблему. Но совершенно не понятно КАК оно работает и ПОЧЕМУ оно так работает.