Яка різниця між термінами «оболонка» та «баш»?


11

Яка різниця між "Шелл" і "Баш" і що означають ці терміни?

Наскільки я знаю, різниці немає. Але я бачив багато книжок про «Шкаралупу» та інші про «Баш»!

Тож у випадку, якщо я хочу працювати з терміналом на Mac OS X і писати кілька сценаріїв баш, мені цікаво, до яких книг мені слід піти.


7
Це відмінність класу від екземпляра.
Каз

1
Цікавий матеріал для читання: unix.stackexchange.com/questions/4126/…
Bernhard

1
першу оболонку написав хлопець на ім’я Борн. BASH - абревіатура для 'Boune Again Shell'. Важливо веселитися!
Kinjal Dixit

Відповіді:


31

" Оболонка " - це будь-яке програмне забезпечення, яке забезпечує інтерфейс до операційної системи. Наприклад, explor.exe - це оболонка за замовчуванням у Windows (хоча існують альтернативи ), а в OS X Finder надається майже однакова функціональність. На Linux / * nix оболонка може бути частиною робочого середовища (наприклад, Gnome або KDE ), або може бути окремим програмним компонентом, що знаходиться над нею (наприклад, Unity або Cinnamon ).

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

Bash є специфічним прикладом оболонки командного рядка і, мабуть, є одним з найбільш відомих, він є замовчуванням у багатьох дистрибутивах Linux, а також OS X. Він був розроблений як заміна оболонки Bourne (Bash stand для "Bourne again shell"), одна з перших оболонок Unix .

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


3
Finder зазвичай не називається оболонкою в OS X. Більшість функцій GUI та управління вікнами обробляються іншими процесами.
Лрі

1
@LauriRanta Вікіпедія, схоже, не погоджується . Незалежно від того, чи має вона допомогу в інших процесах, її завдання полягає в тому, щоб користувач міг взаємодіяти з базовою ОС через графічний інтерфейс, і, таким чином, він відповідає опису графічної оболонки.
Індрек

1
Я здогадуюсь, що термін графічна оболонка також може застосовуватися до програм управління файлами. Але він зазвичай не використовується в OS X, і Finder більше схожий на Nautilus, ніж оболонку Windows або Unity.
Лрі

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 , "Оболонка Борна знову", написаний Брайаном Фоксом для проекту GNU як безкоштовна заміна ш.

Сьогодні bash - це, мабуть, найпопулярніша оболонка Unix, але багато людей (включаючи мене) все ще віддають перевагу оболонці C, заснованій на (що деяким із нас здається) її приємнішому синтаксису. В основному це питання смаку, тому я рекомендую прочитати статті, пов’язані з Вікіпедією, до яких я посилаюся, щоб допомогти вам розпочати роботу.


2
Оболонки не обов'язково базуються на командному рядку, є також багато графічних оболонок, наприклад, Nautilus, Windows Explorer, Finder тощо. Основним моментом для оболонки є обгортка / користувальницький інтерфейс / оболонка навколо основних функцій ОС / системних викликів, тобто оболонки забезпечують управління ресурсами (наприклад, управління файлами) та управління процесами.
Лежи Райан

1
@LieRyan це не оболонки, вони файлові менеджери. Оболонки дозволяють інтегрованим інтерпретаторам команд / сценаріїв працювати в них. Дивіться мою відповідь. Просто можливість запуску програми з файлового менеджера не робить її оболонкою.
Білл Росмус

@BillR: Вам слід повідомити хлопців Gnome Shell про своє визначення.
парадороїд

2
Я схильний погодитися з Лі Раяном і парадороїдом, що графічні оболонки зараз вважаються оболонками. Я настільки ж інвестував у парадигму командного рядка як будь-хто і чинив опір прийняттю графічних оболонок як оболонок протягом 90-х. Але з усіма віджетами панелі керування і тим більше, що є в сучасній графічній оболонці, я зараз погоджуюся, що звичайне використання - називати їх оболонками, і це правильне використання. Вони відповідають визначенню оболонки, відносно тонкого шару користувальницького інтерфейсу навколо базової ОС. Графічні оболонки слабкіші щодо того, як хтось би щось сценаріював, але багато користувачів це не цікавлять.
Ніколь Гамільтон

6

Термін «оболонка» добре названий. Це буквально оболонка навколо O / S, що дозволяє користувачеві взаємодіяти з комп'ютером. Коли він спочатку був задуманий, було дуже мало, якщо якісь графічні інтерфейси користувача (без вікон :(). Все робилося в командному рядку. Але навіть командному рядку потрібно було жити. Він жив і досі працює в оболонці .

Простіше кажучи, для того, щоб командний рядок був корисним, потрібні були інструкції, які він може викликати. Таким чином, програми були запущені всередині оболонки для використання командного рядка. Програми були щільно згруповані у власні пакети, і вони мали на меті працювати разом. Вони включають такі програми, як "ls" та "grep", "ps", "sed" тощо. Вони також включають команди перенаправлення файлів, наприклад ">" та "<", і pipe ("|"). Що ще важливіше, вони також включають в себе такі програми програмування, як умовні операції (якщо, тоді, інакше, для циклів, тоді як цикли, способи перевірити стан, що повертається під час запуску оператора (наприклад, якщо ви запускаєте "ls", це щось знайшло?)) таким чином). Це основи складніших сценаріїв командного рядка (оболонки),

Коли хтось використовує термін "Bash Shell", вони говорять про інтерпретатора командного рядка під назвою "Bash", який працює в оболонці O / S. Ви можете подумати про це як короткий перекладач "Bash Shell Interpreter". Є й інші перекладачі, такі як Борн (Bash - це «нова і вдосконалена оболонка Борна, і це коротке за Bourne Again Shell»). Існують також C-Shell, K-Shell (перевагу багатьох, хто пише складні сценарії оболонки), та інші варіанти GNU. З роками стало звичним посилатися на конкретний інтерпретатор командного рядка, який ви використовуєте як оболонку, оскільки один не може бути використаний без іншого. Але реальність така, що вони різні.

Щодо того, чому вони належним чином відомі як інтерпретатори командного рядка, а не як фактична оболонка: це тому, що вони живуть у оболонці та інтерпретують усі команди так, ніби вони виконують програму. І оболонці неважливо, який інтерпретатор ви запускаєте в ньому, якщо він відповідає правильним стандартам.

А щодо того, чому їх називають перекладачами, це тому, що вони справді перекладачі. Навіть якщо ви явно не виконуєте сценарій (а сценарій насправді є лише текстовим файлом команд, які ви створюєте, щоб ви могли виконувати одні й ті ж команди знову і знову без необхідності вводити їх знову). Наприклад, візьміть скромну команду 'ls'. Після запуску він повертає список файлів. Але те, як він працює, важливіше для вашого питання: він насправді працює в контексті інтерпретатора командного рядка, навіть якщо ви просто запускаєте те, що видається простою командою. Тобто це працює так, ніби це було заявою в частині більшої програми. Він працює так, ніби він був у файлі сценарію скрипта оболонки, фактично не знаходиться у файлі сценарію оболонки. Анонімний сценарій файлу оболонки як би.

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

Щоб побачити, що я маю на увазі, зробіть каталог "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 - це текстовий інтерфейс користувача.

Баш - тип оболонки.


2
Що таке "тестовий користувальницький інтерфейс"? Також було б непогано розширити свою відповідь. Як видно з інших відповідей, це завжди допомагає надати більше контексту.
slhck

Вибачте. Текстовий інтерфейс користувача. Як би ви хотіли, щоб я пояснив це? Оболонка - це спосіб взаємодії з ядром операційних систем вашого командного рядка. Shell інтерпретує ваші команди та передає їх машині, яка потім, у свою чергу, виконує необхідні операції, що стосуються команди, яку ви дали? Без посібника на 500 сторінок важко ефективно пояснити це неоднозначне питання. Зусилля відповіді відповідало зусиллям питання. Це питання стосується яблук до апельсинів.
HayekSplosives

Якщо ви думаєте, що питання зараз показує зусилля, які не означають автоматично, ви не повинні докладати зусиль, щоб відповісти на нього. У вашій відповіді, порівняно з іншими, бракує трохи деталей. Звичайно, це додати вам.
slhck

Я ціную виправлення та урок на особисту відповідальність. Дякуємо, що захистили тих, хто не бажає докладати зусиль від тих, хто це робить. Я абсолютно поза межами забуваючи, скільки я заборгував плакату.
HayekSplosives


1

bash є однією з багатьох існуючих оболонок.

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

Через те, що bashдуже поширене, часто мається на увазі, що сценарій сумісний з ним.

Якщо ви хочете придбати книгу, придбайте одну, написану спеціально для оболонки, яку ви збираєтесь використовувати. Було б непогано почитати про їхні відмінності, перш ніж витрачати гроші.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.