To powiedziawszy, powłoka Korn - jako odrębna od powłoki POSIX - nigdy tak naprawdę nie stała się popularna poza komercyjnym światem Unix. Jest tak, ponieważ jego wzrost odpowiadał wczesnym latom komercjalizacji Uniksa, więc został wciągnięty w wojny z Unixem . BSD Unixes zrezygnował z niego na rzecz powłoki C, a jego kod źródłowy nie był swobodnie dostępny do użycia w Linuksie, kiedy się zaczął. ⁵ Kiedy pierwsi dystrybutorzy Linuksa zaczęli szukać powłoki poleceń do jądra Linux, zwykle wybierali GNU Bash , jeden z tych sh
kompatybilnych programów, o których mówisz
Że na początku stowarzyszenie między Linuksem a bash dość dużo przypieczętował los wielu innych pocisków, w tym ksh
, csh
i tcsh
. Dzisiaj są jeszcze bardzo trudni ludzie używający tych pocisków, ale są oni w mniejszości
Użyłem „skryptu powłoki” powyżej jako ogólnego terminu oznaczającego skrypty powłoki Bourne / POSIX. Wynika to z wszechobecności muszli rodziny Bourne. Aby mówić o skryptach na innych powłokach, musisz podać kwalifikator, na przykład „Skrypt powłoki C.” Nawet w systemach, w których powłoka rodziny C jest domyślną powłoką interaktywną, lepiej jest używać powłoki Bourne'a do pisania skryptów.
Istnieje wiele sposobów sprawdzenia, czy dany skrypt powłoki rodziny Bourne jest przenośny:
Wczesne wersje BSD Unix były tylko dodatkowymi kolekcjami oprogramowania dla V6 Unix. Ponieważ powłoka Bourne'a została dodana do AT&T Unix dopiero w wersji 7, BSD technicznie nie zaczęło od posiadania powłoki Bourne. Odpowiedź BSD do pierwotnego charakteru powłoki Thompson był powłoka C .
Niemniej, pierwsze wersje standalone z BSD (2.9BSD i 3bsd) oparto na V7 lub jego następcy przenośnej UNIX / 32V , więc nie obejmują powłoki Bourne.
(Linia 2BSD stała się równoległym rozwidleniem BSD dla minikomputerów Digital PDP , podczas gdy linie 3BSD i 4BSD wykorzystały nowsze typy komputerów, takie jak stacje robocze Vaxen i Unix . 2.9BSD była zasadniczo wersją PDP 4.1cBSD; były to współczesny, a wspólny kod . PDP nie tylko znikają, gdy VAX przybył, więc linia 2BSD jest nadal guzdrających wzdłuż ).
Można śmiało powiedzieć, że powłoka Bourne'a była wszędzie w świecie uniksowym do 1983 roku. To dobre przybliżenie do „na zawsze” w branży komputerowej. MS-DOS otrzymał w tym roku hierarchiczny system plików (awww, jak cuuute!) I pierwszy 24-bitowy Macintosh z 9 - calowym ekranem czarno - białym - nie w skali szarości, dosłownie czarno - białym - nie pojawiłby się na początku następnego roku.
Pancerz Thompsona był dość prymitywny jak na dzisiejsze standardy. To była tylko interaktywna powłoka poleceń, a nie środowisko programowania skryptów, którego oczekujemy dzisiaj. Miał takie rzeczy jak potoki i przekierowanie I / O, które uważamy za prototypowo część „powłoki Unix”, tak więc myślimy o powłoce poleceń MS-DOS jako o pobieraniu ich z Uniksa.
Bourne powłoki wymienić także powłoki PWB , które dodaje ważne co do powłoki Thompson, jak programowalność ( if
, switch
i while
) oraz pierwszą formę zmienne środowiska. Powłoka PWB jest jeszcze mniej dobrze zapamiętywana niż powłoka Thompson, ponieważ nie była częścią każdej wersji Uniksa.
Kiedy ktoś nie jest konkretny w kwestii zgodności powłoki POSIX z Bourne, może oznaczać cały szereg rzeczy.
Z jednej strony mogliby użyć powłoki Bourne'a z 1979 r. Jako podstawy. Określenie „ sh
-Kompatybilny skrypt” w tym sensie oznaczałoby oczekuje się, by idealnie na prawdziwej powłoki Bourne lub jego następców prawnych i klonów: ash
, bash
, ksh
, zsh
, etc.
Ktoś z drugiej strony przyjmuje zamiast tego powłokę określoną przez POSIX. Obecnie bierzemy tak wiele funkcji powłoki POSIX jako „standardowe”, że często zapominamy, że tak naprawdę nie były one obecne w powłoce Bourne'a: wbudowana arytmetyka, kontrola zadań, historia poleceń, aliasy, edycja wiersza poleceń, $()
forma polecenia zamiana itp.
Chociaż skorupa Korna ma korzenie sięgające wczesnych lat 80., AT&T nie dostarczał jej w Uniksie aż do wydania Systemu V w wersji 4 w 1988 roku. Ponieważ tak wiele komercyjnych Uniksów opiera się na SVR4, wprowadzono ksh
prawie każdy odpowiedni komercyjny Unix z pod koniec lat 80.
(Kilka dziwnych uniksowych smaków opartych na SVR3 i wcześniejszych trzymało się kawałków rynku po wydaniu SVR4, ale były one pierwsze pod ścianą, gdy nadeszła rewolucja ).
Rok 1988 jest również rokiem, w którym pojawił się pierwszy standard POSIX , z opartą na powłoce Korna „powłoką POSIX”. Później, w 1993 roku, pojawiła się ulepszona wersja skorupy Korna. Ponieważ POSIX skutecznie przybił oryginał, ksh
rozwidlił go na dwie główne wersje: ksh88
i ksh93
nazwał po latach zaangażowanych w ich podział.
ksh88
nie jest w pełni kompatybilny z POSIX, choć różnice są niewielkie, dlatego niektóre wersje ksh88
powłoki zostały załatane, aby były zgodne z POSIX. (To z ciekawego wywiadu na temat Slashdota z Dr. Davidem G. Kornem . Tak, facet, który napisał powłokę.)
ksh93
jest w pełni kompatybilnym nadzbiorem powłoki POSIX . Rozwój ksh93
był sporadyczny, odkąd główne repozytorium źródeł zostało przeniesione z AT&T do GitHub, a najnowsze wydanie ma około 3 lat, kiedy to piszę, ksh93v. (Podstawowa nazwa projektu zawiera ksh93
sufiksy dodane w celu oznaczenia wersji po 1993 roku).
Systemy, które zawierają powłokę Korna jako odrębną rzecz od powłoki POSIX, zwykle udostępniają ją jako /bin/ksh
, chociaż czasami chowa się gdzie indziej.
Kiedy mówimy o ksh
skorupie Korna z nazwy, mówimy o ksh93
cechach, które odróżniają ją od jej kompatybilnych wstecz podzbiorów powłok Bourne i POSIX. ksh88
Dzisiaj rzadko spotykasz się z czystym .
AT&T zachował własność kodu źródłowego powłoki Korna do marca 2000 r . W tym momencie powiązanie Linuksa z GNU Bash było bardzo silne. Bash i ksh93
każdy z nich ma przewagę nad innymi , ale w tym momencie bezwładność utrzymuje Linuksa ściśle związany z Bash.
Jeśli chodzi o to, dlaczego pierwsi dostawcy Linuksa najczęściej wybierali GNU Bash pdksh
, który był dostępny w momencie uruchamiania Linuksa, sądzę, że dzieje się tak, ponieważ tak duża część pozostałej części użytkownika pochodzi również z projektu GNU . Bash jest również nieco bardziej zaawansowany niż pdksh
, ponieważ programiści Bash nie ograniczają się do kopiowania funkcji powłoki Korna.
Prace pdksh
zakończyły się w momencie, gdy AT&T wydało kod źródłowy do prawdziwej powłoki Korna. Istnieją dwa główne widły, które nadal są utrzymywane, jednak: OpenBSD pdksh
i MirBSD Korn Shellmksh
.
Uważam za interesujące, że mksh
jest to jedyna implementacja powłoki Korna obecnie pakowana dla Cygwin.
GNU Bash wykracza poza POSIX na wiele sposobów, ale możesz poprosić go o uruchomienie w czystszym trybie POSIX .
csh
/ tcsh
był zwykle domyślną interaktywną powłoką w systemach uniksowych BSD na początku lat 90.
Będąc wariantem BSD , wczesne wersje Mac OS X były takie, poprzez Mac OS X 10.2 „Jaguar” . OS X zmienił domyślną powłokę tcsh
na Bash w OS X 10.3 „Panther” . Ta zmiana nie wpłynęła na systemy zaktualizowane z wersji 10.2 lub wcześniejszej. Obecni użytkownicy w tych skonwertowanych systemach zachowali tcsh
powłokę.
FreeBSD twierdzi, że nadal używa tcsh
jako domyślnej powłoki , ale na maszynie wirtualnej FreeBSD 10, którą tu mam, domyślna powłoka wydaje się być jedną z odmian powłoki Almquist kompatybilnych z POSIX . Dotyczy to również NetBSD.
OpenBSD używa pdksh
zamiast tego rozwidlenia jako domyślnej powłoki.
Większa popularność Linuksa i OS X sprawia, że niektórzy ludzie żałują, że FreeBSD nie zmieni się również na Bash, ale nie zrobią tego w najbliższym czasie z powodów filozoficznych . Jest łatwo je przełączać , jeśli to przeszkadza.
Obecnie rzadko można znaleźć system z prawdziwie waniliową powłoką Bourne'a /bin/sh
. Musisz zrobić wszystko, aby znaleźć coś wystarczająco blisko do testowania zgodności.
Znam tylko jeden sposób na uruchomienie oryginalnej powłoki Bourne'a z 1979 roku na nowoczesnym komputerze: użyj obrazów dysku Ancient Unix V7 z symulatorem SIMH PDP-11 z Computer History Simulation Project . SIMH działa na prawie każdym nowoczesnym komputerze , nie tylko na Uniksie. SIMH działa nawet na Androidzie i iOS .
W przypadku OpenSolaris firma Sun po raz pierwszy zakupiła wersję SVR4 powłoki Bourne'a. Wcześniej kod źródłowy wersji Bourne'a po wersji V7 był dostępny tylko dla osób posiadających licencję na kod źródłowy w systemie Unix.
Ten kod jest teraz dostępny osobno od reszty nieistniejącego projektu OpenSolaris z kilku różnych źródeł.
Najbardziej bezpośrednim źródłem jest projekt powłoki Heirloom Bourne . Stało się to dostępne wkrótce po wydaniu OpenSolaris w 2005 roku. W ciągu następnych kilku miesięcy wykonano prace związane z przenoszeniem i naprawą błędów, ale prace nad projektem zostały wstrzymane.
Jörg Schilling wykonał lepszą robotę, utrzymując wersję tego kodu, tak jak osh
w swoim pakiecie Schily Tools . Więcej informacji na ten temat znajduje się powyżej.
Należy pamiętać, że te powłoki pochodzące z wydania kodu źródłowego 2005 zawierają wielobajtową obsługę zestawu znaków , kontrolę zadań, funkcje powłoki i inne funkcje nieobecne w oryginalnej powłoce Bourne'a z 1979 roku.
Jednym ze sposobów stwierdzenia, czy korzystasz z oryginalnej powłoki Bourne'a, jest sprawdzenie, czy obsługuje ona dodaną nieudokumentowaną funkcję ułatwiającą przejście z powłoki Thompson: ^
jako alias |
. To znaczy, że polecenie takie ls ^ more
spowoduje błąd w powłoce typu Korna lub POSIX, ale będzie zachowywać się jak ls | more
w prawdziwej powłoce Bourne'a.
Czasami napotkasz fish
, scsh
lub rc/es
przylegające, ale są jeszcze rzadsze niż fanów powłoki C.
rc
Rodzina muszli nie jest powszechnie stosowany w systemach Unix / Linux, ale rodzina jest historycznie ważne, co jest, jak to zdobył miejsce w powyższym schemacie. rc
jest standardową powłoką systemu Plan 9 z systemu operacyjnego Bell Labs , swego rodzaju następcą dziesiątej edycji systemu Unix , utworzonego w ramach ciągłych badań Bell Labs nad projektowaniem systemu operacyjnego. Jest to niezgodne zarówno z powłoką Bourne'a, jak i C na poziomie programowania; prawdopodobnie jest tam lekcja.
Najbardziej aktywnym wariantem rc
wydaje się być ten utrzymywany przez Toby'ego Goodwina , który jest oparty na rc
klonie Uniksa autorstwa Byrona Rakitzisa.
sh
). W przypadku innej powłoki odnosi się do tego, czy ta powłoka może uruchamiać skrypty powłoki Bourne.