Добавить в корзинуПозвонить
Найти в Дзене
Машинное обучение

Linux-инсайт: shell - это просто обычная программа

Ваш терминал не разговаривает с ядром напрямую магическим языком. Shell - это обычная userspace-программа. Просто таких программ целое семейство: bash, zsh, fish, dash, ksh, ash, встроенный shell из BusyBox. С точки зрения ядра все они делают примерно одну и ту же работу: - читают байты из file descriptor - парсят их как командный язык - вызывают fork - вызывают exec - запускают другие программы Разница почти вся живёт в userspace: какой синтаксис shell принимает, насколько он удобен в интерактивной работе, насколько строго следует POSIX и какие расширения добавляет сверху. POSIX описывает shell-язык, который часто называют просто sh. Большинство shell реализуют его как базу, а потом добавляют свои фичи. Поэтому bash и dash - это не «разные терминалы». Это разные реализации одной идеи. Небольшой сюрприз: в Debian и Ubuntu /bin/sh обычно не bash, а dash. Он проще, меньше и стартует быстрее. Поэтому скрипт с первой строкой: #!/bin/sh может вести себя не так, как вы ожидаете, есл

Linux-инсайт: shell - это просто обычная программа

Ваш терминал не разговаривает с ядром напрямую магическим языком. Shell - это обычная userspace-программа. Просто таких программ целое семейство:

bash, zsh, fish, dash, ksh, ash, встроенный shell из BusyBox.

С точки зрения ядра все они делают примерно одну и ту же работу:

- читают байты из file descriptor

- парсят их как командный язык

- вызывают fork

- вызывают exec

- запускают другие программы

Разница почти вся живёт в userspace: какой синтаксис shell принимает, насколько он удобен в интерактивной работе, насколько строго следует POSIX и какие расширения добавляет сверху.

POSIX описывает shell-язык, который часто называют просто sh. Большинство shell реализуют его как базу, а потом добавляют свои фичи.

Поэтому bash и dash - это не «разные терминалы». Это разные реализации одной идеи.

Небольшой сюрприз: в Debian и Ubuntu /bin/sh обычно не bash, а dash. Он проще, меньше и стартует быстрее. Поэтому скрипт с первой строкой:

#!/bin/sh

может вести себя не так, как вы ожидаете, если вы писали его «как bash-скрипт».

Проверьте у себя:

readlink -f /bin/sh

И вы увидите, какой shell реально стоит за /bin/sh на вашей машине.