Однак, оболонка Korn - як річ, відмінна від оболонки POSIX - ніколи не стала популярною поза комерційним світом Unix. Це тому, що його підйом відповідав першим рокам комерціалізації Unix, тому він потрапив у війни у Unix . BSD Unixes відмовився від цього на користь оболонки C, і його вихідний код не був вільно доступний для використання в Linux, коли він почав працювати. вони зазвичай обирають GNU Bash , один із тих sh
-сумісних, про які ти говориш.⁶
Ця рання асоціація між Linux та Bash значною мірою запечатала долю багатьох інших оболонок, у тому числі ksh
, csh
та tcsh
. Сьогодні ці снаряди все ще використовують, але вони в меншості .⁷
Я використав "скрипт оболонки" вище як загальний термін, що означає сценарій оболонки Bourne / POSIX. Це пов’язано з всюдисущими оболонками родини Борн. Щоб говорити про сценарії на інших оболонках, вам потрібно дати класифікатор, наприклад "Сценарій оболонки C". Навіть у системах, де оболонка сімейства C є інтерактивною оболонкою за замовчуванням, краще використовувати оболонку Bourne для сценаріїв.
Існує багато способів перевірити, чи є переносний сценарій оболонки сімейства Bourne:
Ранні версії BSD Unix були лише додатковою колекцією програмного забезпечення для V6 Unix. Оскільки оболонка Bourne не була додана в AT&T Unix до V7, BSD технічно не почав мати оболонку Bourne. Відповідь BSD до примітивної природі оболонки Томпсон був Сі - оболонка .
Проте, перші версії автономна з BSD (2.9BSD і 3BSD) були засновані на V7 або його наступника портативного UNIX / 32V , тому вони зробили включати оболонку Борна.
(Лінія 2BSD перетворилася на паралельну вилку BSD для міні-комп’ютерів PDP Digital , в той час як лінії 3BSD і 4BSD продовжували користуватися новими типами комп'ютерів, такими як робочі станції Vaxen і Unix . 2.9BSD був по суті PDP-версією 4.1cBSD; вони були сучасники, і загальний код . ПРП не просто зникає , коли VAX прибув, так що 2BSD лінія ще Shambling разом .)
Можна з упевненістю сказати, що оболонка Борна була всюди в світі Unix до 1983 року. Це гарне наближення до "назавжди" в обчислювальній галузі. Того року MS-DOS отримав ієрархічну файлову систему (awww, як cuuute!), А перший 24-розрядний Macintosh із 9-дюймовим екраном B&W - не сірим кольором , буквально чорно - білим - не з'явиться до початку наступного року.
Шкаралупа Томпсона була досить примітивною за сьогоднішніми мірками. Ми очікували це лише інтерактивна командна оболонка, а не середовище програмування скриптів. У нього були такі речі, як труби та перенаправлення вводу / виводу, які ми вважаємо прототипними частинами "оболонки Unix", так що ми думаємо про командну оболонку MS-DOS як отримання їх від Unix.
Bourne оболонка також замінити ПРБ оболонку , яка додала важливі речі оболонки Томпсона , як программируемость ( if
, switch
і while
) і ранню форму змінних оточення. Оболонка PWB навіть менш добре запам'ятовується, ніж оболонка Томпсона, оскільки вона не була частиною кожної версії Unix.
Коли хтось не конкретний щодо сумісності оболонок POSIX проти Bourne, існує цілий спектр речей, які вони можуть означати.
З одного боку, вони могли використовувати оболонку Борна 1979 року як основну лінію. « sh
-Сумісний сценарій» в цьому сенсі означає, що , як очікується, прекрасно працювати на істинної оболонці Bourne або будь-якому з його спадкоємців і клонів: ash
, bash
, ksh
, zsh
і т.д.
Хтось з іншого крайнього місця замість цього приймає оболонку, вказану POSIX. У наші дні ми приймаємо так багато функцій оболонки POSIX як "стандартні", що ми часто забуваємо, що їх фактично не було в оболонці Bourne: вбудована арифметика, контроль роботи, історія команд, псевдоніми, редагування командного рядка, $()
форма команди підміна тощо.
Хоча оболонка Korn має коріння ще на початку 1980-х, AT&T не доставляв її в Unix до випуску System V, випуску 4 в 1988 році. Оскільки так багато комерційних Unixes базуються на SVR4, це вкладається ksh
у майже всі відповідні комерційні Unix з кінець 1980-х років.
(Кілька дивних ароматів Unix на основі SVR3 і раніше трималися на шматочках ринку після виходу SVR4, але вони були першими біля стіни, коли відбулася революція .)
1988 рік - це також рік, коли з'явився перший стандарт POSIX , на базі якого використовується корпус Korn - "оболонка POSIX". Пізніше, у 1993 році, вийшла вдосконалена версія оболонки Корна. Оскільки POSIX фактично прибив оригінал на місце, ksh
роздвоєний на дві основні версії: ksh88
і ksh93
, названий на честь років, які брали участь у їх розколенні.
ksh88
не повністю сумісний з POSIX, хоча відмінності невеликі, тому деякі версії ksh88
оболонки були виправлені на POSIX-сумісність. (Це з цікавого інтерв'ю на Slashdot з доктором Девідом Г. Корном . Так, хлопець, який написав оболонку.)
ksh93
є повністю сумісним набором оболонки POSIX . Розвиток в Інтернеті ksh93
носить епізодичний характер, оскільки сховище первинних джерел перейшло з AT&T в GitHub, а останньому випуску було близько 3 років, як я пишу це, ksh93v. (Основна назва проекту залишається ksh93
суфіксами, доданими для позначення версій версій після 1993 року.)
Системи, що включають оболонку Korn як окрему річ від оболонки POSIX, зазвичай роблять її доступною як /bin/ksh
, хоча іноді вона ховається в іншому місці.
Коли ми говоримо про ksh
або оболонку Корна за назвою, ми говоримо про ksh93
особливості, які відрізняють її від сумісних назад підмножин Bourne та POSIX оболонок. Ти рідко сьогодні перебігаєш чисте ksh88
.
AT&T зберігав вихідний код оболонки Korn до березня 2000 року . На той момент асоціація Linux з GNU Bash була дуже сильною. Bash і ksh93
кожен мають переваги перед іншими , але на даний момент інерція тримає Linux тісно пов'язаний з Bash.
Щодо того, чому перші постачальники Linux найчастіше обирають GNU Bash over pdksh
, який був доступний на момент запуску Linux, я думаю, це тому, що значна частина решти користувачів також походить від проекту GNU . Bash також дещо досконаліший pdksh
, оскільки розробники Bash не обмежуються копіюванням функцій оболонки Korn.
Робота над pdksh
зупинилася приблизно на той час, коли AT&T випустила вихідний код до справжньої оболонки Korn. Однак існують два основні вилки: OpenBSD pdksh
та KorBS Shell MirBSDmksh
.
Мені здається цікавим, що mksh
це єдина реалізація оболонки Korn, яка наразі упакована для Cygwin.
GNU Bash багато в чому виходить за рамки POSIX, але ви можете попросити його працювати в більш чистому режимі POSIX .
csh
/ tcsh
зазвичай була інтерактивною оболонкою за замовчуванням на BSD Unixes на початку 1990-х.
Будучи варіантом BSD , ранні версії Mac OS X проходили саме так, через Mac OS X 10.2 "Jaguar" . OS X переключила оболонку за замовчуванням з tcsh
Bash в OS X 10.3 "Panther" . Ця зміна не вплинула на системи, оновлені з 10.2 або раніше. Існуючі користувачі цих перетворених систем зберігали tcsh
оболонку.
FreeBSD стверджує, що як і раніше використовується tcsh
як оболонка за замовчуванням , але у FreeBSD 10 VM, який я тут маю, оболонка за замовчуванням є одним із варіантів оболонки Almquist, сумісної з POSIX . Це стосується і NetBSD.
OpenBSD використовує вилку pdksh
як оболонку за замовчуванням.
Більш висока популярність Linux та OS X змушує деяких людей бажати, щоб FreeBSD також перейшов на Bash, але вони цього не зроблять незабаром з філософських причин . Його легко переключити , якщо це вас турбує.
Рідко можна зустріти систему із справді ванільною оболонкою Борна, як /bin/sh
сьогодні. Вам доведеться вийти зі свого шляху, щоб знайти щось досить близьке до нього для тестування на сумісність.
Мені відомо лише один спосіб запустити справжню вінтажну оболонку Борна 1979 року на сучасному комп’ютері: використовувати дискові зображення Ancient Unix V7 за допомогою симулятора SIMH PDP-11 із проектування моделювання історії комп’ютерів . SIMH працює майже на кожному сучасному комп'ютері , а не тільки на Unix. SIMH працює навіть на Android та iOS .
У OpenSolaris компанія Sun вперше відкрила версію оболонки Bourne SVR4. До цього вихідний код для версій оболонки Bourne після V7 був доступний лише тим, хто має ліцензію на вихідний код Unix.
Цей код тепер доступний окремо від решти неіснуючого проекту OpenSolaris з декількох різних джерел.
Найбільш прямим джерелом є проект оболонки Heirloom Bourne . Це стало доступним незабаром після оригінального випуску OpenSolaris 2005 року. Деяка робота з портативності та виправлення помилок була виконана протягом наступних кількох місяців, але потім розвиток проекту зупинився.
Йорг Шиллінг зробив кращу роботу з підтримання версії цього коду, як osh
у своєму пакеті інструментів Schily . Детальніше про це див. Вище.
Майте на увазі, що ці оболонки, отримані з випуску вихідного коду 2005 року, містять багатобайтову підтримку набору символів , контроль роботи, функції оболонки та інші функції, відсутні в оригінальній оболонці Борна 1979 року.
Один із способів визначити, чи є ви в оригінальній оболонці Bourne, - це перевірити, чи підтримує він незадокументовану функцію, додану для полегшення переходу від оболонки Томпсона: ^
як псевдонім для |
. Тобто така команда, як ls ^ more
помилка, призведе до помилки в оболонці типу Korn або POSIX, але вона буде вести себе як ls | more
у справжній оболонці Bourne.
Іноді ви зіткнулися fish
, scsh
або rc/es
прихильник, але вони ще рідше , ніж шанувальники C оболонки.
rc
Сімейство оболонок зазвичай не використовується в системах Unix / Linux, але сім'я є історично важливим, що , як він отримав місце в діаграмі вище. rc
є стандартною оболонкою операційної системи Plan 9 від операційної системи Bell Labs , свого роду спадкоємцем 10-го видання Unix , створеного як частина постійних досліджень Bell Labs щодо проектування операційної системи. Він несумісний з оболонкою Bourne та C на рівні програмування; там, мабуть, є урок.
Найбільш активним варіантом rc
з'являється той, який підтримує Тобі Гудвін , який базується на rc
клоні Unix Байрона Ракіціса.
sh
). Для іншої оболонки вона посилається на те, може ця оболонка виконувати сценарії оболонки Bourne чи ні.