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 shkompatybilnych 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, cshi 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, switchi 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 kshprawie 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ł, kshrozwidlił go na dwie główne wersje: ksh88i ksh93nazwał po latach zaangażowanych w ich podział.
ksh88nie jest w pełni kompatybilny z POSIX, choć różnice są niewielkie, dlatego niektóre wersje ksh88powł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ę.)
ksh93jest w pełni kompatybilnym nadzbiorem powłoki POSIX . Rozwój ksh93był 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 ksh93sufiksy 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 kshskorupie Korna z nazwy, mówimy o ksh93cechach, które odróżniają ją od jej kompatybilnych wstecz podzbiorów powłok Bourne i POSIX. ksh88Dzisiaj 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 pdkshzakoń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 pdkshi MirBSD Korn Shellmksh .
Uważam za interesujące, że mkshjest 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/ tcshbył 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ę tcshna 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 tcshpowłokę.
FreeBSD twierdzi, że nadal używa tcshjako 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 pdkshzamiast 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 oshw 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 ^ morespowoduje błąd w powłoce typu Korna lub POSIX, ale będzie zachowywać się jak ls | morew prawdziwej powłoce Bourne'a.
Czasami napotkasz fish, scshlub rc/esprzylegające, ale są jeszcze rzadsze niż fanów powłoki C.
rcRodzina 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. rcjest 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 rcwydaje się być ten utrzymywany przez Toby'ego Goodwina , który jest oparty na rcklonie 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.