Ваш терминал не разговаривает с ядром напрямую магическим языком. 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 на вашей машине.



