Чому в системі Unix є кілька оболонок?


16

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

Оболонка - це інтерпретатор командного рядка, який зчитує введення користувача та виконує команди. Введення користувача в оболонку зазвичай здійснюється з терміналу (інтерактивна оболонка) або іноді з файлу (називається скриптом оболонки).

Потім книга перераховує ряд програм оболонок, таких як Bourne shell, Bourne-знову shell, Cshell тощо. В основному моє запитання, чому нам потрібні кілька оболонок?


4
Та ж причина, що існує стільки стандартів для різних інших технологій. xkcd.com/927
Дан вигадує Firelight

1
З тієї ж причини, чому ви можете мати компілятори / інтерпретатори для декількох мов програмування (також кілька компіляторів для однієї мови) або декілька Інтернет-браузерів.
Міща Ареф’єв

6
Ваше питання є презумпційним. « Навіщо нам потрібні кілька снарядів? » Хто вам сказав, що нам потрібні кілька снарядів? У вашій книзі сказано, що у нас є кілька оболонок. Це не те саме.
Роб

Відповіді:


15

Більшість оболонок, які використовуються в сучасних середовищах UNIX, повинні відповідати специфікації POSIX sh. POSIX sh походить від оригінальної оболонки Korn (ksh88), яка, в свою чергу, походить від попередньої оболонки Bourne, але POSIX sh лише визначає невеликий підмножина навіть функціональності ksh88. У оболонці, яка реалізує лише мінімальну вимогу, бракує багатьох функцій, необхідних для написання всіх, крім самих тривіальних сценаріїв, безпечним та розумним способом. Наприклад, локальні змінні та масиви - це нестандартні допоміжні елементи.

Тому перша причина - це розширення оболонки з додатковими функціями. Різні оболонки вирішують зосередитись на різних речах. Наприклад, Zsh зосереджується на вдосконалених інтерактивних функціях, тоді як ksh93 (поточна "оригінальна" оболонка korn) зосереджується на потужних програмуючих функціях та продуктивності. Навіть дуже мінімальні оболонки, такі як Dash, додають принаймні кілька нестандартних додатків, як локальні змінні.

Додаткові особливості рідко є взаємодіючими, якщо вони взагалі є. Більшість наборів функцій ksh88 досить добре взаємодіє, наприклад, синтаксис розширеного глобусу, але з нестандартними функціями гарантій немає, і ви дійсно повинні знати, що ви робите, щоб користуватися ними портативно.

Друга причина - спадщина. Є ще багато фірмових Unixes, які використовують старі нестандартні реалізації для їх / bin / sh. До недавнього часу Соларіс все ще використовував Борна в якості свого спаду і вирішив підтримувати оболонку Heirloom, а не модернізувати щось сучасне. Ці системи зазвичай постачаються з різними оболонками, на які можна перейти, наприклад, змінивши змінну PATH або змінивши шебаги в окремих сценаріях.

Отже, підсумовуючи. Є кілька оболонок, часто за замовчуванням:

  • Для додаткових функцій, особливо для роботи з портативними додатками.
  • Для обробки застарілих сценаріїв, які часто не підтримуються.
  • розмір / продуктивність. Вбудовані системи часто вимагають невеликих оболонок, таких як mksh або busybox sh.
  • Причини ліцензування. AT&T ksh було власником програмного забезпечення приблизно до 2000 року. Це багато в чому породило всіх ksh-подібних клонів, таких як Zsh та Bash.
  • Інші історичні причини. Незважаючи на те, що сьогодні це не дуже популярно, були радикальні спроби переробити мову, наприклад, scsh та es. Особливість процесу заміщення багатьох оболонок спочатку походить від rc (з дещо іншим синтаксисом) та розширення дужок із csh. Різні оболонки мають різні комбінації таких особливостей, як правило, з деякими тонкими або не настільки тонкими відмінностями.

2
Зауважте, що, хоча localце не POSIX або Unix, він вказаний і необхідний у стандарті Linux (LSB) та стандарті політики debian . Зауважте, що esце продовження rc.
Stéphane Chazelas

1
Зараз mkshвиникло як публічне надбання Bourne Shell, яке також було написано через ліцензійні причини. (Ці проблеми досі залишаються - ліцензування та переносимість та розмір - це три фактори, які допомогли мені переконати Google включити mksh з Android.)
mirabilos

19

Оскільки люди мають різні потреби, і добре мати альтернативи, що відповідають вашим потребам у даній ситуації. Оболонка - це лише інструмент сам по собі, і на мою думку, його слід замінити будь-яким іншим. Це сила Unix / Linux, на відміну від того, що Microsoft Windows обрала.

Так само ... Чому так багато текстових редакторів? Чому люди розробляють новий браузер, якщо він вже є? Чому існують GNOME, KDE, Xfce, LXDE, E17 тощо?


12
Точно. Можна запитати "чому стільки менеджерів вікон?" так само. Універсал Unix може задати протилежне запитання: чому лише один CMD.EXE? Чому Windows настільки жорстка і не налаштована?
Брюс Едігер

1
@BruceEdiger Що ти маєш на увазі, лише один cmd.exe? Для цього є альтернативи, якщо ви хочете їх використовувати. Навіть самі Microsoft мають альтернативу PowerShell.
Малькольм

3
Навіть COMMAND.COMу DOS був змінним. Однак ви часто отримуєте дуже крихку систему через припущення інших програм (та інших користувачів). Як результат, є кілька успішних альтернатив CMD.EXE. Один - PowerShell, який має інерцію Microsoft, яка його підтримує. Інший приклад, як не дивно, bashзавдяки гідній підтримці з боку громади Cygwin, не кажучи вже про людей, що займаються MinGW. Що стосується Менеджерів вікон, у Windows була лише одна за одною, але їх було декілька з часом, коли саме середовище Windows розвивалося.
RBerteig

+1 за цю відповідь. Я думаю, що тому у нас так багато різноманітних ароматів UNIX: AIX, HP-UX, Solaris, Tru64, IRIX, UnixWare, OS X, Linux, FreeBSD, NetBSD, OpenBSD, ..., ви це назвете!
тонга

4

Коротка відповідь

Через дивну історію ліцензування, жодна організація не розробила Unix. Це був процес громади, в якому брали участь як волонтери, так і корпорації. Ці організації не завжди ділилися всіма своїми інструментами, тому траплялися окремі оболонки. До того моменту, як ми зрозуміли, наскільки це протилежне продуктивності, було вже пізно уніфікувати всі використовувані снаряди. Натомість проводиться робота над тим, щоб усі ці снаряди були (теоретично) сумісні між собою .

Довга відповідь є складною і тісно пов'язаною з історією самого Unix. На цій сторінці немає жодної відповіді, але це широко (неправильно) задокументовано. Більш детальні та точні відповіді ви знайдете, оглянувши Інтернет та книги, що стосуються історії Unix.


2

Різні оболонки існують з тих самих причин, що й різні веб-браузери: кожен має перевагу, а деякі оболонки мають історичний багаж чи обертів. Кожен має різні особливості та ідіосинкразії.


1

Здебільшого, історія ...

Борн був розроблений як частина (приналежності) SysV Unix, тоді як BSD використовувався csh... Пізніше bash був розроблений як альтернатива оболонці Bourne (та його вдосконаленим версіям, як ksh). Оболонка Борна була прийнята в стандарті POSIX. ksh сумісний і bash може бути поступливим.

Оболонки люблять cshі tcshнабагато простіше використовувати інтерактивно, ніж оригінальну оболонку Борна (у якої бракує виконання команд тощо), але вони жахливі для сценаріїв ...

У деяких середовищах, таких як вбудовані системи на базі Unix, функції сценарію, розмір і швидкість важливіші, ніж інтерактивні функції, такі як виконання команд, і інший варіант оболонок, як правило, використовується.

Для портативних сценаріїв ви повинні використовувати POS-сумісний варіант Bourne та уникати розширень.


3
-1 за думку, що світ почався у SysV. Bourne оболонки був випущений в UNIX V7 в 1977 році, за шість років до SysV був звільнений.
Роб

@Rob, с / +1977 / +1979 /
Stéphane Chazelas

Досить справедливо ... Історія * nix досить складна ... Дивіться en.wikipedia.org/wiki/File:Unix_history-simple.svg
Герт ван ден Берг
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.