Dlaczego istnieje wiele powłok w systemie uniksowym?


16

Właśnie zacząłem uczyć się podstaw Unixa i zastanawiam się, dlaczego jest tyle powłok w systemie uniksowym. Z książki Zaawansowane programowanie w środowisku Unix :

Powłoka to interpreter wiersza poleceń, który odczytuje dane wejściowe użytkownika i wykonuje polecenia. Dane wejściowe użytkownika do powłoki zwykle pochodzą z terminala (powłoka interaktywna) lub czasami z pliku (zwanego skryptem powłoki).

Następnie książka podaje listę programów powłoki, takich jak powłoka Bourne'a, powłoka Bourne-again, Cshell itp. Moje pytanie jest w zasadzie dlaczego potrzebujemy wielu powłok?


4
Obowiązuje ten sam powód, dla którego istnieje tak wiele standardów dla różnych innych technologii. xkcd.com/927
Dan

1
Z tego samego powodu, dla którego możesz mieć kompilatory / interpretatory dla wielu języków programowania (także wiele kompilatorów dla jednego języka) lub wiele przeglądarek internetowych.
Mischa Arefiev

6
Twoje pytanie jest przypuszczalne. „ Dlaczego potrzebujemy wielu muszli? ” Kto powiedział, że potrzebujemy wielu muszli? Twoja książka mówi, że mamy wiele muszli. To nie to samo.
Rob

Odpowiedzi:


15

Większość powłok używanych w nowoczesnych środowiskach UNIX ma być zgodna ze specyfikacją sh POSIX. POSIX sh pochodzi z oryginalnej powłoki Korna (ksh88), która z kolei pochodzi z wcześniejszej powłoki Bourne'a, ale POSIX sh określa tylko niewielki podzbiór nawet funkcjonalności ksh88. W powłoce, która implementuje tylko minimalne wymagania, brakuje wielu funkcji wymaganych do pisania wszystkich oprócz najbardziej trywialnych skryptów w bezpieczny i rozsądny sposób. Na przykład zmienne lokalne i tablice są niestandardowymi dodatkami.

Dlatego pierwszym powodem jest rozszerzenie powłoki o dodatkowe funkcje. Różne muszle skupiają się na różnych rzeczach. Na przykład Zsh koncentruje się na zaawansowanych funkcjach interaktywnych, podczas gdy ksh93 (obecna „oryginalna” powłoka Korn) koncentruje się na zaawansowanych funkcjach programowania i wydajności. Nawet bardzo minimalne powłoki, takie jak Dash, dodają co najmniej kilka niestandardowych dodatków, takich jak zmienne lokalne.

Dodatkowe funkcje rzadko są szeroko interoperacyjne, jeśli w ogóle. Większość zestawów funkcji ksh88 jest dość dobrze interoperacyjnych, takich jak rozszerzona składnia globowania, ale w przypadku niestandardowych funkcji nie ma żadnych gwarancji i musisz naprawdę wiedzieć, co robisz, aby używać ich w przenośny sposób.

Drugim powodem jest dziedzictwo. Wciąż istnieje wiele zastrzeżonych uniksów, które używają starożytnych niestandardowych implementacji dla swojego / bin / sh. Do niedawna Solaris nadal korzystał z Bourne'a jako defuault i postanowił zachować powłokę Heirloom, zamiast ulepszyć ją do czegoś nowoczesnego. Systemy te zazwyczaj zawierają różne powłoki, na które można się przełączać, na przykład zmieniając zmienną PATH lub zmieniając shebangi w poszczególnych skryptach.

Podsumowując. Istnieje wiele powłok, często domyślnie:

  • Dodatkowe funkcje, szczególnie w przypadku nieprzenośnych dodatków.
  • Do obsługi starszych skryptów, które często nie są konserwowane.
  • rozmiar / wydajność. Systemy osadzone często wymagają małych powłok, takich jak mksh lub busybox sh.
  • Powody licencyjne. AT&T ksh było oprogramowaniem zastrzeżonym do około 2000 roku. To w dużej mierze dało początek wszystkim klonom podobnym do ksh, takim jak Zsh i Bash.
  • Inne przyczyny historyczne. Choć dziś niezbyt popularne, podjęto radykalne próby przeprojektowania języka, takie jak scsh i es. Funkcja zastępowania procesów wielu powłok pierwotnie pochodzi z rc (z nieco inną składnią) i rozszerzenia nawiasów klamrowych z csh. Różne powłoki mają różne kombinacje takich funkcji, zwykle z pewnymi subtelnymi lub nie tak subtelnymi różnicami.

2
Zauważ, że chociaż localnie jest to POSIX ani Unix, jest on określony i wymagany w standardzie Linux (LSB) i standardzie polityki debian . Pamiętaj, że esjest to kontynuacja rc.
Stéphane Chazelas

1
To, co obecnie mkshpowstało jako Public Domain Bourne Shell, również zostało napisane z powodów licencyjnych. (Te problemy nadal występują - licencjonowanie, przenośność i rozmiar były trzema czynnikami, które pomogły mi przekonać Google do włączenia mksh z Androidem.)
mirabilos

19

Ponieważ ludzie mają różne potrzeby i dobrze jest mieć alternatywy dopasowane do twoich potrzeb w danej sytuacji. Powłoka jest narzędziem jako takim i moim zdaniem powinna być wymienna na dowolną inną. Taka jest moc Uniksa / Linuksa, w przeciwieństwie do systemu Microsoft Windows.

Podobnie ... Dlaczego jest tak wiele edytorów tekstu? Dlaczego ludzie opracowują nową przeglądarkę, jeśli już istnieje? Dlaczego istnieje GNOME, KDE, Xfce, LXDE, E17 itp.?


12
Dokładnie. Można zapytać „dlaczego tak wielu menedżerów okien?” także. Natywny unix może zadać przeciwne pytanie: dlaczego tylko jeden CMD.EXE? Dlaczego system Windows jest tak sztywny i nie można go dostosowywać?
Bruce Ediger

1
@BruceEdiger Co masz na myśli, tylko jeden cmd.exe? Istnieją alternatywy, jeśli chcesz ich użyć. Nawet sam Microsoft ma PowerShell jako alternatywę.
Malcolm,

3
Nawet COMMAND.COMw DOS był wymienny. Jednak często masz bardzo kruchy system ze względu na założenia innych aplikacji (i innych użytkowników). W rezultacie istnieje kilka udanych alternatyw dla CMD.EXE. Jednym z nich jest PowerShell, który ma bezwładność Microsoft. Innym przykładem jest, co dziwne, z bashpowodu przyzwoitego wsparcia społeczności Cygwin, nie wspominając już o ludziach z MinGW. Jeśli chodzi o Window Managers, Windows miał tylko jeden na raz, ale z czasem pojawiło się ich kilka w miarę ewolucji środowiska Windows.
RBerteig

+1 za tę odpowiedź. Myślę, że właśnie dlatego mamy tak wiele różnorodnych odmian UNIX: AIX, HP-UX, Solaris, Tru64, IRIX, UnixWare, OS X, Linux, FreeBSD, NetBSD, OpenBSD, ... to ty to nazwij!
tonga

4

Krótka odpowiedź

Z powodu dziwnej historii licencjonowania, żaden pojedynczy podmiot nie opracował Uniksa. Był to proces społeczny, w którym uczestniczyli zarówno wolontariusze, jak i korporacje. Istoty te nie zawsze dzieliły się wszystkimi swoimi narzędziami, więc miały miejsce osobne powłoki. Zanim zdaliśmy sobie sprawę z tego, że jest to nieproduktywne, było już za późno, aby zjednoczyć wszystkie używane powłoki. Zamiast tego podjęto prace, aby wszystkie te powłoki były (teoretycznie) kompatybilne ze sobą .

Długa odpowiedź jest złożona i ściśle związana z historią samego Uniksa. Nie ma mowy, aby zawierała jedną odpowiedź na tej stronie, ale została szeroko (źle) udokumentowana. Bardziej szczegółowe i precyzyjne odpowiedzi znajdziesz, rozglądając się po Internecie i książkach dotyczących historii Uniksa.


2

Istnieją różne powłoki z tych samych powodów, dla których istnieją różne przeglądarki internetowe: każdy ma preferencje, a niektóre mają historyczny bagaż lub pęd. Każda z nich ma inne cechy i osobliwości.


1

Głównie historia ...

Bourne został opracowany jako część (własność) SysV Unix, podczas gdy BSD użył csh... Później bash został opracowany jako alternatywa open source dla powłoki Bourne'a (i jego ulepszonych wersji, takich jak ksh). Powłoka podobna do Bourne'a została przyjęta w standardzie POSIX. ksh jest zgodny, a bash może być zgodny.

Powłoki lubią cshi tcshsą o wiele łatwiejsze w użyciu interaktywnym niż oryginalna powłoka Bourne'a (które nie mają ukończonych poleceń itp.), Ale są straszne dla skryptów ...

W niektórych środowiskach, takich jak systemy wbudowane oparte na Uniksie, funkcje skryptów, rozmiar i szybkość są ważniejsze niż funkcje interaktywne, takie jak uzupełnianie poleceń, i zwykle używany jest inny wariant powłok.

Do przenośnych skryptów należy używać wariantu Bourne'a zgodnego z POSIX i unikać rozszerzeń.


3
-1 za myślenie, że świat zaczął się w SysV. Bourne shell została wydana w UNIX v7 w 1977 roku, sześć lat przed SysV został zwolniony.
Rob

@Rob, s / 1977 / +1.979 /
Stéphane Chazelas

W porządku ... Historia * nix jest dość skomplikowana ... Zobacz en.wikipedia.org/wiki/File:Unix_history-simple.svg
Gert van den Berg
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.