11

В чем разница между "Shell" и "Bash" и что означают эти термины?

Насколько я знаю, разницы нет. Но я видел много книг о "Shell" и других о "Bash"!

Поэтому, если я хочу работать с Терминалом в Mac OS X и написать несколько сценариев bash, мне интересно, к каким книгам мне следует обратиться.

6 ответов6

31

« Оболочка » - это любое программное обеспечение, которое предоставляет интерфейс для операционной системы. Например, explorer.exe является оболочкой по умолчанию в Windows (хотя альтернативы существуют), а в OS X Finder предоставляет большую часть тех же функций. В Linux/* nix оболочка может быть частью среды рабочего стола (например, Gnome или KDE) или может быть отдельным программным компонентом, расположенным поверх него (например, Unity или Cinnamon).

Приведенные выше примеры представляют собой графические оболочки, которые используют комбинацию окон, меню, значков и других подобных элементов для обеспечения графического интерфейса пользователя (GUI), с которым можно взаимодействовать с помощью курсора мыши. Однако в контексте таких программ, как Bash или при написании сценариев, под "оболочкой" обычно понимается интерпретатор командной строки, который выполняет в основном те же функции, что и графическая оболочка, за исключением того, что он полностью основан на тексте.

Bash - это конкретный пример оболочки командной строки, и, вероятно, один из самых известных, который используется по умолчанию во многих дистрибутивах Linux, а также в OS X. Он был разработан как замена оболочки Bourne (стоит Bash). для "Bourne again shell"), одна из первых оболочек Unix.

Примеры оболочек командной строки в Windows включают cmd.exe (он же командная строка) и PowerShell.

13

Баш - одна из нескольких оболочек.

Оболочка в Unix или Unix-подобной системе, такой как OSX или Linux, представляет собой прикладную программу, которая предоставляет интерфейс командной строки для операционной системы, позволяя вам вводить команды и запускать их. Существует множество различных оболочек на выбор, но все они предоставляют подстановочные знаки для имен файлов, трубопроводы, документы, подстановку команд, переменные и управляющие структуры для проверки условий и итерации.

Первоначальной оболочкой Unix была оболочка Bourne, sh, написанная Стивеном Борном в Bell Labs. Затем появилась оболочка C, написанная Биллом Джоем из Беркли и обновленная как tcsh. Другие оболочки включают оболочку Korn, ksh, написанную Дэвидом Корном, также в Bell Labs, и bash, "оболочку Bourne again", написанную Брайаном Фоксом для проекта GNU в качестве бесплатной замены sh.

Сегодня bash, пожалуй, самая популярная оболочка Unix, но многие люди (включая меня) все еще предпочитают оболочку C, основанную на (как некоторым из нас кажется) более приятном синтаксисе. По сути, это дело вкуса, поэтому я рекомендую прочитать статьи Википедии, на которые я ссылаюсь, чтобы помочь вам начать работу.

6

Термин «оболочка» хорошо назван. Это буквально оболочка вокруг O/S, позволяющая пользователю взаимодействовать с компьютером. Когда он был задуман, было очень мало графических пользовательских интерфейсов (без окон :(). Все было сделано в командной строке. Но даже командной строке нужно место для жизни. Он жил и до сих пор живет в раковине.

Проще говоря, чтобы командная строка была полезной, ей нужны инструкции, которые она могла бы вызвать. Таким образом, были созданы программы для запуска внутри оболочки для использования в командной строке. Программы были сгруппированы в свои собственные пакеты и предназначены для совместной работы. Они включают такие программы, как "ls" и "grep", "ps", "sed" и т.д. Они также включают команды перенаправления файлов, такие как ">" и "<", а также каналы ("|"). Что еще более важно, они также включают в себя программные конструкции, такие как условные операции (если, тогда, еще, для циклов, в то время как циклы, способы проверки состояния, возвращаемого при выполнении оператора (например, если вы запустили "ls", он что-нибудь нашел?) как это). Это основа более сложных сценариев командной строки (оболочки) и фактически является интерпретатором командной строки.

Когда кто-то использует термин «Bash Shell», он говорит о интерпретаторе командной строки «Bash», который запускается в оболочке O/S. Вы можете думать об этом как о сокращении «Bash Shell Interpreter». Есть и другие переводчики, такие как Bourne (Bash - это новая и улучшенная оболочка Bourne Shell, а для Bourne Again Shell она сокращена). Есть также C-Shell, K-Shell (любимый многими, кто пишет сложные сценарии оболочки), и другие варианты GNU. С годами стало привычным ссылаться на конкретного интерпретатора командной строки, который вы используете в качестве оболочки, потому что один не может использоваться без другого. Но реальность такова, что они разные.

Что касается того, почему они должным образом известны как интерпретаторы командной строки, а не как фактическая оболочка: это потому, что они живут в оболочке и интерпретируют все команды, как если бы они выполнялись в программе. И оболочке все равно, какой интерпретатор вы используете в ней, если она соответствует правильным стандартам.

И то, почему они называются переводчиками, это потому, что они действительно переводчики. Даже если вы не запускаете скрипт явно (а скрипт на самом деле представляет собой просто текстовый файл команд, которые вы создаете, чтобы вы могли выполнять одни и те же команды снова и снова без необходимости их повторного ввода). Например, возьмите смиренную команду «ls». Когда вы запускаете его, он возвращает список файлов. Но то, как он работает, более важно для вашего вопроса: он на самом деле работает внутри контекста интерпретатора командной строки, даже если вы просто запускаете то, что кажется простой командой off. То есть он работает так, как если бы он был частью более крупной программы. Он работает так, как если бы он находился в файле сценария сценария оболочки, фактически не находясь в файле сценария оболочки. Файл сценария анонимной оболочки как бы.

Все, что вы запускаете в командной строке, имеет это общее (будь то отдельная команда, такая как 'ls' или файл сценария, полный команд, итераторов и условных операторов): все это обрабатывается интерпретатором командной строки; будь то Bash, C-Shell, K-Shell (по умолчанию в AIX, кстати).

Чтобы понять, что я имею в виду, создайте каталог 'test':

mkdir test

Введите его и выполните следующие команды

grep hello * 

Вы получите ответ вроде «нет такого файла или каталога». Теперь введите команду

echo $?

($? говорит, скажи мне, что вы нашли в загадочном компьютере говорить.) Вы должны увидеть, как он возвращает число (должно быть) '2'. Это код возврата от grep, который означает «нет такого файла или каталога». Теперь запустите следующее:

echo hello > hello.txt
grep hello *
echo $?

Вы увидите файл 'hello.txt', возвращенный из начальной команды grep, и теперь должны увидеть 'echo $?'вернуть число' 0 ', означающее, что он действительно что-то нашел.

Даже если эти, казалось бы, единственные команды запускаются, интерпретатор командной строки действует так, как будто он является частью более крупной программы, и отслеживает их возвращаемые значения. Вот почему, если вы забудете * в конце команды grep, она не вернется. Он знает, что утверждение является неполным и ожидает большего ввода. В конце концов, вы, возможно, захотите попросить его отобразить результаты некоторого цикла, который абсолютно допустим для написания и запуска в командной строке.

Суть в том, что оболочка - это оболочка, и интерпретатор (независимо от того, какое имя вы используете, 'Bash', k-shell и т.д.) Различаются. Но часто они используются взаимозаменяемо, потому что в любой момент они полностью связаны друг с другом.

2

Shell - это текстовый пользовательский интерфейс.

Bash это тип оболочки.

1

bash является одним из семейства shell , но есть много других оболочек.

Например, в Minix3 есть оболочка ash , она не поддерживает ассоциативные массивы, такие как bash4 .

Стандарт POSIX - это попытка создать переносимый API между различными оболочками и ОС.

Смотрите http://en.wikipedia.org/wiki/Unix_shell#Bourne_shell_compatible

1

bash - одна из многих существующих оболочек.

Все оболочки имеют свои сходства и различия. Например, скрипт, написанный на bash, может быть полностью или в значительной степени совместим с другой оболочкой (например, zsh).

Из-за того, что bash очень широко распространен, часто подразумевается, что скрипт совместим с ним.

Если вы хотите купить книгу, купите книгу, написанную специально для оболочки, которую вы собираетесь использовать. Хотя было бы неплохо прочитать их различия, прежде чем тратить деньги.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .