Bash використовується за замовчуванням у кожному дистрибутиві Linux, який я пробував, для таких альтернатив, як Z shell (zsh). Чи є для цього технічна чи історична причина?
Bash використовується за замовчуванням у кожному дистрибутиві Linux, який я пробував, для таких альтернатив, як Z shell (zsh). Чи є для цього технічна чи історична причина?
Відповіді:
Історія (здобута не за допомогою досліджень, а завдяки витраченню зовсім небагато часу на спілкування з людьми Bell Labs):
На початку (якщо вважати початком версією Unix 7) була оболонка Bourne. Стів Борн першим показав, що оболонка, яка контролювала взаємодію користувача, може бути програмою користувача, а не особливою частиною операційної системи. Історичний прорив. Сама оболонка була відносно чистою для сценаріїв, але не мала редагування командного рядка або контролю за роботою. Введення Борна в оболонку Unix все ще корисно для початківців користувачів сьогодні.
Редагувати : Я проігнорував деякі "доісторії" від Кена Томпсона та Джона Маші, також з "Мультікс". Я впевнений, що Борн знав про всю цю роботу (він був у тій же лабораторії, 1127, в лабораторії Bell), але оболонка Борна була остаточною, і на попередню роботу мало вплив, окрім інтерпретації Стіва Борна. Наприклад, хоча Кен пізніше написав компілятор Plan 9 C і був дуже впливовим на План 9, але в роботі Тома Даффа про оболонці Plan 9 (rc) згадується тільки оболонка Борна, а не Томпсон.
Оболонка - це лише програма користувача, тому її може написати будь-хто. Оскільки версія 7 Unix створювалася в Нью-Джерсі, Берклі Unix створювався в Каліфорнії. Білл Джой в Берклі написав csh
, C оболонку. Джой додав контроль над роботою та історією, а згодом і редагуванням командного рядка, але не знав про роботу Борна і тому ґрунтував свою мову на оболонці Томпсона (яку я вважав "доісторичною" у попередній кулі). Громада Unix любила контроль за роботою, але вони також полюбили мову Борна. Для не особливо гарної полеміки щодо мови csh, див. Програмування Csh, що вважається шкідливою . Протягом певного часу багато людей використовували csh
інтерактивно для функцій контролю роботи та історії, але використовували Борна sh
для написання сценаріїв. Ця ситуація була менш ідеальною.
Редагувати : Завдяки DigitalRoss випрямив мене з хронології csh
. Оскільки я здобув освіту у людей, які називають BSD "єресі Берклі", мені там було дуже мало фактів.
Дейв Корн у Bell Labs провів блискучу перепрофілювання оболонки Борна, щоб отримати корпус Korn (кш). Це було повністю сумісно з оболонкою Bourne, sh
але забезпечило судно безцінного вдосконалення. ksh
став основою стандарту POSIX і постачався стандартним програмним забезпеченням Sun. (Це незважаючи на те, що Білл Джой покинув Берклі, щоб допомогти знайти Sun, і був одним з їхніх провідних хлопців із програмного забезпечення.)
Bell Labs та AT&T тупо не вдається ksh
відкрити вихідний код. ksh88
широко використовується, але наявність джерел не є законною. Деякі люди настільки звикають, що стають цифровими злочинцями.
Редагувати : Це було насправді так нерозумно? Важко пізнати. Берклі вже віддав Unix, і незабаром пішли інші корпорації, але це все-таки була епоха, коли корпоративні майстри вірили в плату за Unix. Але результати: AT&T Unix мертвий, після того, як неодноразово продавався різним сторонам. BSD та його похідні живі і здорові, але ці випереджаючі речі, які називаються "Linux" та "GNU", мають величезну частку розуму, яка колись належала Bell Labs.
Фонд вільного програмного забезпечення робить "чисту кімнату", починаючи з нуля впровадження оболонки POSIX, приймаючи всі ідеї Дейва Корна як тодішні, а також у звичайному стилі FSF додаючи нові власні функції, такі як програмоване завершення. Вони називають це оболонкою "Борн знову", або bash
.
У середині 1990-х років відкриті джерела AT&T ksh93
, але до цього часу вже пізно для широкого застосування. Договір ліцензування дивно нестандартний. bash
і ksh
розходяться, і ksh
ніколи не досягають ринкової частки, пропорційної її місце в історії.
Уроки:
Перший адекватний продукт, який виходить на ринок (sh).
Люди люблять нові функції (контроль роботи, виконання команд), але вони люблять їх ще більше, коли старі сценарії продовжують працювати.
Редагувати : професори техніки повинні залишати історію історикам науки :-)
Bash має дві абсолютно різні речі для цього.
Це тонка оболонка. Це одна з, можливо, двох оболонок (інша - zsh), які інтегрують деякі цікаві csh
функції, такі як !
підміна історії, у синтаксис posix. Він має багато розширень, включаючи масиви.
Це оболонка FSF / GNU. У світі з відкритим кодом це надає йому свого роду кашет.
Слід також додати, що це не завжди за замовчуванням. ash
часто використовується як / bin / sh, так що, хоча це bash
може бути інтерактивна оболонка, ash
це оболонка "просто запустіть командний файл". Це тому, що ash
вона менша і швидша, і містить функції posix, тому це належна підмножина. Використовувати ash
як інтерактивну оболонку іноді проблематично. На, скажімо, NetBSD, він працює добре, бо там він побудований з усіма можливостями. Це свого роду їхня оболонка, тоді bash
як зовнішня упаковка. Але в Linux ash
зазвичай вважають неінтерактивним, тому вони складають його без історії та без (важливого) редагування рядків на теорії, що він просто використовується для запуску цих величезних gnu configure
сценаріїв.
Справжня історія оболонки
ОНОВЛЕННЯ: Існує неточна історія скопіювання оболонки з місця на місце в Інтернеті, і люди, зрозуміло, у це вірять. Я спробую дати точну версію та надати кілька посилань, щоб її обґрунтувати тут.
<, >, >>, |, &
але він просто мав простий goto
синтаксис управління через зовнішню програму, яка шукала на стандартному вході. Тоді не було складних сценаріїв оболонок. Пізніше оболонки відкриють командний вхід на окремому fd. Сьогодні це може виглядати просто, але у фільмі жахів, що було вичислено в 1970-х, це було найкраще на землі. Вірите чи ні, ця давня оболонка має свій власний потік щебет сьогодні і, звичайно, домашню сторінку .csh
, написана (як це було vi
) від Білл Джой в UCB. Це було раніше, ніж читати лінійку GNU та редагувати NetBSD, тому, мабуть, здавалося, цілком розумно робити історію із !
синтаксисом. Csh додав більшість функцій оболонки сьогодні, але з синтаксисом csh. csh не змінив жодного синтаксису , безоплатно або іншим чином. Насправді він був сумісний із оболонкою Томпсона та спочатку включав вихідний код TS.osh
і csh
залишився популярним в протягом деякого часу . Інтернету не було, і він отримав ліцензію SW, тому в цьому середовищі можливо, що Стівен Борн не знав про оболонку Джоя і, звичайно, Джой не знав про Борна. Цілком можливо, що обидва снаряди вперше зустрілися, коли UCB отримав VAX і попереднє випуск вже забутого Unix / 32V . Я пам'ятаю, як Білл скаржився на розподіл пам'яті. Зауважте, що обидві оболонки були сумісні з зворотом до оболонки V6, вони просто розширили синтаксис у різних напрямках. ksh
. Врешті-решт, він csh
мав напівдоступний вихідний код, але він був пов'язаний у позові між AT&T та Каліфорнійським університетом . І все-таки це були дні слави BSD Unix, оскільки складні компанії, які могли дозволити собі плату в розмірі 50 000 доларів, купували б ліцензію AT&T, але встановлювали дистрибутив 4.x BSD, і університети отримували його безкоштовно.csh
синтаксисом, скільки й з синтаксисом оболонки Борна, а деякі злили два. Ви, по крайней мере tcsh
, zsh
, bash
і ash
. Синтаксис Bourne був "офіційним", він був частиною випусків AT&T, але в ті часи BSD був досить важливим, і Sun, спочатку BSD, поширював неабияку кількість SW з Unix, з якою стикався світ./bin
і /sbin
залежить від /usr
цього, це порушено і його потрібно виправити; вони повинні залежати лише від бібліотек у Росії /lib
. login
Потрібна лише PAM; "новіший API", який потребує динамічних лібсів, буде NSS. "Тенденція до"? NetBSD 2.0 вже перейшов на повністю динамічний /bin
і /sbin
5 років тому, FreeBSD 5.2 ще довше, а Linux ... ну, це залежить від distro, але це теж давно.
Щоб додати те, що сказав @DigitalRoss
Оскільки Linux - це лише ядро (і потрібна підтримка), а GNU забезпечує (або надає) всі основні клони програмного забезпечення Unix, які роблять те, що ми називаємо "Linux", придатним для використання. Bash - оболонка проекту GNU, написана як клон старішої оболонки Bourne (sh) з Unix версії 7.
Згідно з опитуванням unix.com, це не так вже далеко, ніж ksh.
/ bin / sh 83 8,96%
/ bin / csh 36 3,89%
/ bin / ksh 370 39,96%
/ bin / tcsh 36 3,89%
/ bin / bash 401 43,30%
Баш широко прийнятий завдяки своєму багатому набору функцій. Він також використовує функції інших оболонок, таких як C-shell і Korn-shell. Погляньте на ці функції.
Тому що 'bash' є 100% 'sh / ksh' порівнянним, а 'ksh' оболонкою POSIX.
Тож якщо ви хочете, що відповідає сумісності з POSIX, і ви перебуваєте в Linux, тоді ви використовуєте bash.
Якщо ви перебуваєте в комерційному unix, ви зазвичай отримуєте ksh як оболонку за замовчуванням (колись звичайний просто старий sh). Чомусь Sun все ще за замовчуванням не має пластівців csh c-shell.
Перевагою є портативність .sh, написаного для hp-ux або AIX, має великі шанси працювати як linux 'bash' без будь-яких змін.
І додати до всіх інших відповідей: zsh
не означає бути сумісними назад. Ви, ймовірно, можете налаштувати його так, щоб він був сумісним, але тоді ви втрачаєте його функції.
Я використовую zsh
як звичайну інтерактивну оболонку, але bash
/ dash
здаюся більш розумною для мене, як мови сценаріїв оболонок; вони роблять менше магії і більш передбачувані ... це для мене важливіше, коли я пишу сценарій, який повинен працювати кілька років.
Для того, щоб заплутати питання, sh
команда іноді є лише символічним посиланням на іншу програму оболонки, наприклад ash
, bash
або dash
.
Ubuntu використовував для його посилання bash
, оскільки bash
призначений для запуску будь-якого сумісного сценарію оболонки Bourne.
Однак останнім часом Ubuntu перейшов на sh
посилання на dash
. dash
призначений для запуску bash
сценаріїв (а отже, і sh
сценаріїв), але він призначений для використання лише для сценаріїв, тому йому не вистачає інтерактивних функцій bash
. Це робить його меншим і (можливо) швидшим.