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?
Odpowiedzi:
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:
źródło
local
nie jest to POSIX ani Unix, jest on określony i wymagany w standardzie Linux (LSB) i standardzie polityki debian . Pamiętaj, żees
jest to kontynuacjarc
.mksh
powstał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.)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.?
źródło
COMMAND.COM
w 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 dlaCMD.EXE
. Jednym z nich jest PowerShell, który ma bezwładność Microsoft. Innym przykładem jest, co dziwne, zbash
powodu 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.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.
źródło
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.
źródło
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ą
csh
itcsh
są 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ń.
źródło