Чому bash оболонка за замовчуванням у більшості ОС?


38

Чому bash оболонка за замовчуванням у більшості ОС (Ubuntu, Fedora, OSX тощо)? Чому так багато користувачів досвідчених користувачів в основному використовують zsh? Якщо це добре, чому це не за замовчуванням?

Я використовую обидва, я не бачу різниці, тому що всі мої завдання прості :)


5
Все є кривою Гаусса: якщо це правда, якою користуються більшість просунутих користувачів ksh, то це також правда, що більшість людей використовують іншу оболонку, і це саме по собі пояснило б, чому kshце не оболонка за замовчуванням. Однак я не думаю, що це причина, давайте чекатимемо вбивчої відповіді, що впевнений, що це питання отримає.
kos

1
Власне, я вважаю, що ubuntu використовує тире як оболонку за замовчуванням ...
Bakuriu

1
Це хороша відповідь, я голосую, ми залишаємо це відкритим.
Сет

Відповіді:


33

Я прочитав це з цього приводу, і висновок здається, що це оболонка GNU за замовчуванням (використовується більшістю ОС на базі Linux), і тому вона просто постачається як частина GNU, а також має 20 років розвитку за цим, роблячи це стабільний і добре округлий, він просто найкращий за всіма параметрами, задовольняючи потреби всіх, крім самих просунутих користувачів.

Більше інформації читайте Чому bash стандарт для Linux? (те саме питання в Unix & Linux).

Просто щоб додати ще трохи до цього, є багато інших оболонок, щоб спробувати, якщо вам цікаво, ось декілька з цієї відповіді :

  • Zsh має більш просунуті інтерактивні засоби, але кілька химерностей, коли справа стосується сценаріїв (тим більше, ніж зараз, ніж у ті дні). На початку-середині 1990-х, коли Linux був у зародковому стані, zsh був практично невідомим.

  • Ksh був фактичним стандартом для комерційних об'єднань з середини 1980-х, але це було власницьким програмним забезпеченням до 2000 року, тому не є опцією для Linux. Також ksh мав можливості редагування командного рядка subpar порівняно з bash.

  • Pdksh , вільний клон ksh, був би варіантом, але він був недостатньо відомий і мав погані можливості редагування командного рядка. (Pdksh - це вже не дуже активний проект, хоча він все ще використовується в деяких BSD, тепер, коли ATT ksh є безкоштовним.)

  • Деякі дистрибутиви встановлюють варіант золи як /bin/sh. Зола (під якою я маю на увазі будь-яку з сипучих сімейств оболонок під назвою зола) розроблена таким чином, щоб вона була невеликою і швидкою, без інтерактивних функцій (це лише для редагування сценаріїв). Відродження золи відносно недавно; у 90-х роках існуючих варіантів бракувало безлічі особливостей.

  • Tcsh був найсучаснішою інтерактивною оболонкою, поки не з'явився zsh, але він несумісний з sh і не дуже хороший з сценарієм .


1
Коли ви копіюєте і вставляєте речі з іншого місця, ви повинні чітко вказати, що це так.
муру

1
@muru Я надав посилання на оригінальний пост, але я бачу, що ви могли зрозуміти, що це може бути зрозумілішим.
Марк Кірбі

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

1
У вас також є риба (яка несумісна з синтаксисом sh).
Лео Лам

1
Ви б пояснили, що було недостатнім у редагуванні оболонки Korn? Мені завжди здавалося, що це працює добре для мене, навіть у 90-х.
Джонатан Леффлер

9

Bourne Shell ( ш назад в день) від AT & T гілки Unix була поліпшена і витіснені в Korn Shell, KSH . ksh також вийшов з AT&T Bell Labs і не був GPL (поточна версія - публічна ліцензія Eclipse). C-shell, csh вийшов із Берклі версії Unix і також не був GPL (ліцензія BSD), а також використовував інший синтаксис, ніж sh. Z-оболонка, zsh - це поліпшення щодо sh, але не GPL (ліцензія, схожа на MIT). Bash був поліпшенням щодо sh, використовував GPL та GNU. Тільки за ліцензією Bash, мабуть, був би вибором для операційної системи GPL. Зокрема, оболонка є основною частиною дистрибутива.

Але Bash також був проектом GNU, даючи йому, я думаю, активніший розвиток та робити внески легше, ніж спадковий продукт Berkeley Unix або AT&T Unix. Можна зробити дуже хороший випадок, коли zsh є і є кращою оболонкою, ніж Bash, але цього недостатньо, щоб подолати різні ліцензії та статус проекту, що не стосується GNU.

Коли ще вперше з'являлися дистрибутиви Linux і вибирали оболонку за замовчуванням (на початку до середини 90-х), не було ні github (2008), ні навіть SourceForge (1999). У цей момент я думаю, що проекти GNU мали реальну перевагу перед проектами, які не є GNU, у тому, щоб помітити та малювати та включати нових розробників. Тож дистрибутив може виглядати на Z-оболонці як краще, але також очікувати, що Bash буде отримувати хорошу підтримку та обслуговування вперед, а також додасть до нього більше функцій, що дозволить йому наздогнати zsh.

Тепер, коли Баш мав роки за замовчуванням, це стало стандартом дефакто, про нього написані книги. Є одна книга, яка охоплює як Bash, так і Z-shell , але немає жодної книги, яка охоплює її виключно, тоді як є декілька, які роблять це для Bash.

І в цей момент, якщо distros повинен змінити типовий для оновлення існуючої системи, це порушить установки, оскільки деякі файли ініціалізації мають різні імена (наприклад, .bashrc проти .zshrc), а вміст файлів може мати несумісний синтаксис. Таким чином, вони будуть дуже неохоче робити це, залишаючи нові завантаження мати zsh в якості за замовчуванням, а оновлення - bash. Два різних за замовчуванням одного і того ж дистрибутива - це те, що вони, мабуть, не хочуть підтримувати, і користувачі / компанії також не хочуть мати справу.


1

Усі мови оболонки Unix некрасиві. Деякі, особливо ( csh), деякі, можливо, трохи менше ( ksh? Я не знаю насправді), але насправді, коли мова йде про такі читальності та жорсткості для великих проектів, жоден з них не може наблизитися до добре розроблених мов загального призначення, таких як Python, C # або Haskell. Отже, коли вам хочеться чогось твердого, ви ніколи не виберете жоден із ароматів шкаралупи.

Ви обираєте їх, коли хочете швидко виконати прості речі. Для цього вам потрібно:

  • Короткий синтаксис та достатня послідовність, щоб ви могли його фактично запам'ятати (важко шукати операторів скорочень). Має велике значення, якщо ваша оболонка встановлена ​​скрізь, тому що ви справді не хочете запам’ятати більше одного з цих монстрів.
  • Хороші інтерактивні функції, тому ви можете зламати прямо в термінал і працювати над роботою без необхідності перемикатися між декількома файлами скриптів.
  • Можливість захопити будь-який фрагмент сценарію з будь-якого місця та зробити його просто працюючим. shсумісність є великим плюсом тут, і знову ж таки, чим популярніше, тим краще.

Отож, бачите, популярність у цих мовах оболонок швидше більша, ніж у мовах загального призначення. Отже, навіть якщо kshця мова є трохи «кращою», як наслідок, насправді не так багато успіху у використанні, якщо вона bashє дещо популярнішою (що було у відповідному секторі, оскільки її вперше обрали за замовчуванням для GNU).

Люди, які роблять перемикач, обмірковують це і мають достатньо досвіду, щоб легко впоратися з переходом на улюблену оболонку. OTOH, новичок, який змушений працювати з менш популярною оболонкою, буде швидко плутати, якщо вони попросять в Інтернеті щось, а це не працює. Отже, будь-який дистрибутив, спрямований не тільки на ветеранів Unix, несе певний ризик, якщо це робить щось, крім bashстандартного, кроку, від якого порівняно мало людей отримає користь (і лише небагато).


1
Будь-яка мова, яка піклується про кількість пробілів, не "добре розроблена", але я згоден, що ключова популярність.
Нагора

1
@ Нагора: думки різняться. FWIW, ви завжди можете записувати Haskell з дужками і крапками з крапками замість пробілу, і я вважаю, що Python має подібні резервні копії. Тільки цього ніхто не робить, тому що групування на основі відступів просто вражає читабельності.
близько

1
  1. Це було там, коли це було потрібно
  2. У ньому достатньо очей цукерок, щоб початківці користувачі могли провести тиждень, налаштовуючи своє підказки.
  3. Випадки загального використання досить хороші (найчастіше це запускати одну команду)
  4. Там, де це недостатньо добре, перто, пітон і луа можуть зайняти слабкість.
  5. perl робить жахливу інтерактивну оболонку
  6. хоча риба, ksh або zsh теоретично можуть бути кращою оболонкою, для мене не достатньо жодного вдосконалення для того, щоб перешкоджати, коли perl працює так добре, або переносимість - це проблема, тому я все одно орієнтуюся на тире.

0

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


1
Ви можете використовувати будь-які сценарії bash, оскільки це не має значення оболонка за замовчуванням. Ось що означає she-bang (#! / Bin / bash) у верхній частині сценарію.
Пантера

1
@ bodhi.zazen До тих пір, поки в системі існує оболонка bash. Я знав принаймні версію Solaris, яка не включає bash.
Тулен Кордова

@ bodhi.zazen Існує ментальна вартість перемикання між двома оболонками - однією для взаємодії та однією для створення сценаріїв. Зазвичай турбуватися не варто.
Нагора

1
@Nagora Яка ментальна вартість запуску сценарію?
кос

@kos, якщо ви буквально просто запускаєте сценарії, жоден. Якщо вам доводиться підтримувати та адаптувати сценарії, тоді вам потрібно мати на увазі часто невеликі відмінності між різними базовими оболонками; у цьому випадку існує постійні витрати на метал та вартість перемикання контексту, коли вам доведеться виконати певну роботу в "інший" синтаксис.
Нагора
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.