В чем разница между терминами «Shell» и «Bash»?

11

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

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

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

R.Hen
источник
7
Это различие между классом и экземпляром.
Каз
1
Интересные материалы для чтения: unix.stackexchange.com/questions/4126/…
Бернхард
1
первая оболочка была написана парнем по имени Борн. BASH - это сокращение от «Boune Again Shell». Важно веселиться!
Кинджал Диксит

Ответы:

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 .

Индрек
источник
3
Finder обычно не называют оболочкой в ​​OS X. Большинство функций графического интерфейса и управления окнами обрабатываются другими процессами.
Lri
1
@LauriRanta Википедия, кажется, не согласна . Независимо от того, имеет ли он помощь от других процессов, его задача состоит в том, чтобы позволить пользователю взаимодействовать с базовой ОС через графический интерфейс, и, таким образом, он соответствует описанию графической оболочки.
Индрек
1
Я предполагаю, что термин графическая оболочка может также применяться к приложениям управления файлами. Но он обычно не используется в OS X, и Finder больше похож на Nautilus, чем на оболочку Windows или Unity.
Lri
6
@LauriRanta: быстрый тест, что за значок Наутилус?
Ли Райан
2
@LauriRanta Разве Dock не будет лучшим кандидатом для оболочки? Запуск программ и открытие документов, Expose / Spaces / Mission Control, AFAIK Launchpad и переключатель задач - все это функции Dock.
Даниэль Бек
13

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

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

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

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

Николь Гамильтон
источник
2
Оболочки не обязательно основаны на командной строке, есть также много графических оболочек, например, Nautilus, Windows Explorer, Finder и т. Д. Важным моментом для оболочки является то, что это оболочка / пользовательский интерфейс / оболочка для основных функций ОС / системных вызовов, т.е. оболочки обеспечивают управление ресурсами (например, управление файлами) и управление процессами.
Ли Райан
1
@LieRyan это не оболочки, а файловые менеджеры. Оболочки позволяют интегрированным интерпретаторам команд / скриптов работать внутри них. Смотри мой ответ. Возможность запуска программы из файлового менеджера не превращает ее в оболочку.
Билл Росмус
@BillR: Вы должны сообщить ребятам из Gnome Shell о своем определении.
paradroid
2
Я склонен согласиться с Ли Райаном и Парадроидом, что графические оболочки теперь считаются оболочками. Я так же, как и все остальные, вкладываю в парадигму командной строки и сопротивляюсь принятию графических оболочек в качестве оболочек в 90-е годы. Но со всеми виджетами панели управления и еще чем-то в современной графической оболочке я согласен с тем, что обычно они называются оболочками, и это использование правильно. Они соответствуют определению оболочки, относительно тонкого слоя пользовательского интерфейса вокруг базовой ОС. Графические оболочки слабее того, как кто-то будет писать сценарии, но многие пользователи не заботятся об этом.
Николь Гамильтон
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». Когда вы запускаете его, он возвращает список файлов. Но то, как он работает, более важно для вашего вопроса: он на самом деле работает в контексте интерпретатора командной строки, даже если вы просто запускаете то, что кажется простой командой без подключения. То есть он работает так, как если бы он был частью более крупной программы. Он работает так, как если бы он находился в файле сценария сценария оболочки, фактически не находясь в файле сценария оболочки. Файл сценария анонимной оболочки как бы.

Все, что вы запускаете в командной строке, имеет это общее (будь то отдельная команда, такая как '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 это тип оболочки.

HayekSplosives
источник
2
Что такое «пользовательский интерфейс на основе тестирования»? Также было бы неплохо немного расширить свой ответ. Как видно из других ответов, это всегда помогает придать больше контекста.
slhck
Сожалею. Текстовый пользовательский интерфейс. Как бы вы хотели, чтобы я разъяснил это? Оболочка - это способ вашей командной строки взаимодействовать с ядром операционной системы. Оболочка интерпретирует ваши команды и передает их на компьютер, который, в свою очередь, выполняет необходимые операции, относящиеся к команде, которую вы дали? Без руководства на 500 страниц трудно эффективно объяснить этот неоднозначный вопрос. Усилие ответа соответствует усилию вопроса. Этот вопрос от яблок до апельсинов.
HayekSplosives
Если вы думаете, что вопрос показывает усилия сейчас, это не означает, что вы не должны прикладывать усилия к ответу В вашем ответе по сравнению с остальными не хватает мелочей. Конечно, это зависит от вас, чтобы добавить это.
slhck
Я ценю исправление и урок личной ответственности. Спасибо за то, что защищаете тех, кто не готов приложить усилия от тех, кто это делает. Я совершенно не в порядке, забывая, сколько я должен за плакат.
HayekSplosives
1

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

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

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

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

Жиль Квено
источник
1

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

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

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

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

dset0x
источник