Разница между sh и Bash
Разница между Bash и sh
При написании скриптов для оболочки мы часто используем /bin/sh
и /bin/bash
. Обычно я предпочитаю bash
, но не совсем понимаю, в чем между ними разница.
Какова основная разница между Bash и sh
?
На что нам следует обратить внимание при программировании на Bash и sh
?
2 ответ(ов)
Они практически идентичны, но bash
имеет больше функций. sh
– это (более или менее) устаревший подмножество bash
.
sh
часто означает оригинальную Bourne shell
, которая предшествует bash
(Bourne *again* shell
) и была создана в 1977 году. Однако на практике лучше рассматривать sh
как высоко совместимую оболочку, соответствующую стандарту POSIX с 1992 года.
Скрипты, начинающиеся с #!/bin/sh
или использующие оболочку sh
, обычно делают это для обеспечения обратной совместимости. На любой UNIX/Linux системе должна быть оболочка sh
. Например, в Ubuntu sh
часто вызывает dash
, а на MacOS это специальная версия POSIX bash
. Эти оболочки могут быть предпочтительными для соблюдения стандартов, скорости или обратной совместимости.
bash
новее оригинального sh
, добавляет больше функций и стремится быть обратно совместимым с sh
. Программы, написанные для sh
, обычно работают без проблем в bash
. bash
доступен на почти всех системах Linux/UNIX и обычно используется по умолчанию, за исключением MacOS, где по умолчанию используется zsh
, начиная с версии Catalina (10.15). FreeBSD, по умолчанию, не включает bash
в комплект.
В операционной системе Linux существует несколько типов оболочек (shell). Хотя у оболочек много общих команд, каждая из них обладает уникальными возможностями. Давайте рассмотрим различные наиболее часто используемые оболочки.
Оболочка Sh:
Оболочка Sh, также известная как Bourne shell, была первой оболочкой, разработанной для компьютеров Unix Стивеном Борном в лабораториях AT&T Bell Labs в 1977 году. Она включает в себя множество инструментов для написания сценариев.
Оболочка Bash:
Оболочка Bash расшифровывается как Bourne Again Shell. Bash является стандартной оболочкой большинства дистрибутивов Linux и заменяет оболочку Sh (при этом сценарии, написанные для Sh, также могут выполняться в Bash). Оболочка Bash может выполнять подавляющее большинство сценариев оболочки Sh без модификаций и также предоставляет возможность редактирования командной строки.
Что означает "2>&1"?
Как установить переменную на вывод команды в Bash?
Как выводить команды оболочки по мере их выполнения
Как запросить ввод Yes/No/Cancel в скрипте оболочки Linux?
Как сделать паузу в shell-скрипте на одну секунду перед продолжением?