Zauważyłem, że w zasadzie żaden system, z którym kiedykolwiek pracowałem, nie ma /bin/sh
tak naprawdę pliku wykonywalnego. Zawsze jest to dowiązanie symboliczne do dash
, bash
w trybie POSIX lub coś podobnego.
Dlaczego? Jakie są wady korzystania z prawdziwego, oryginalnego /bin/sh
? (Szybkość? Licencjonowanie?)
sh
symbolicznychksh
?ksh
.bash
IIRC.sh
opiera się na standardzie, co oznacza, że możemy mieć kilka implementacji, które będą się zachowywać w jasno określony sposób, o ile użyjesz standardowej składni w swoim skrypcie.Odpowiedzi:
Domyślam się, że brakuje funkcji - bez historii poleceń, bez fantazyjnych przekierowań, bez edycji wiersza poleceń.
csh
Z tych powodów BSD wprowadziło powłokę C. Innym czynnikiem jest to, że Oryginalna Powłoka Bourne'a była niedawno dostępna w wersji open source . O ile nie masz licencji, nie możesz go rozpowszechniać. To sprawiło, że był on poza zasięgiem bezpłatnych dystrybucji i sprawił, że był ideologicznie niesmaczny dla innych dystrybucji i * BSD.Ale kod jest już dostępny . Możesz rzucić okiem, skompilować, spróbować.
źródło
sh
jest dokładnie takie samo jak używanie,bash
z tym że jest: wolniejsze, programy są dłuższe i trudniejsze w utrzymaniu.sh
polecenie uruchomienia powłoki zgodnej z POSIX, czym nie jest starsza powłoka Bourne'a. Choć POSIX nie wymagash
się w/bin/sh
, to katalog najbardziej logiczne, że będzie.sh
nie ma tyldy i nawiasów, niektóre Zabudowy brakuje (nppushd
ipopd
,select
) nie arytmetycznego. Brakuje wielu zmiennych, npPIPESTATUS
.Stwierdzenie w twoim pytaniu jest nieprawidłowe. Solaris do wersji 10 jest zapewnienie prawdziwej starszej powłoki Bourne jako
/bin/sh
. Zrobiono to, aby nie naruszać kompatybilności ze starymi skryptami, które mogą zawieść z inną powłoką. Ten wybór był jednak bardzo frustrujący.Większość, jeśli nie wszystkie pozostałe wydania Uniksa i Unixa, w tym Solaris 11, zapewniają powłokę zgodną z
/bin/sh
POSIX, ponieważ POSIX nakazujesh
polecenie uruchomienia powłoki POSIX, a nie starszej powłoki Bourne, która nie jest zgodna./bin/sh
jest ogólnie:ksh88
lubksh93
w komercyjnych implementacjach Uniksabash
naOS/X
(choć kiedyśzsh
)ash
lubpdksh
pochodną w innychBSDs
bash
lubdash
w dystrybucjach Gnu / Linux.Niekoniecznie jest to łącze, ale może być prawdziwym plikiem wykonywalnym na wielu systemach oprócz Gnu / Linuxes.
Co ciekawe, pomimo tego, co stanowi najbardziej pozytywną odpowiedź na twoje pytanie, to nie brak funkcji skłania deweloperów dystrybucji do zainstalowania czegoś innego niż starsza powłoka Bourne'a,
/bin/sh
ale chęć bycia jak najbardziej zgodnym z POSIX, tj. Zachowywania się jak Uniksowy system operacyjny. Fakt, że powłoka POSIX ma więcej funkcji niż starsza powłoka Bourne, jest tylko efektem ubocznym tego standardowego celu zgodności.Jest również faktem, że niektóre powłoki
bash
zachowują się inaczej, gdy są wywoływanesh
, a to w większości usuwa funkcje z powłoki, a nie na odwrót.źródło
O ile mi wiadomo, oryginalna powłoka Bourne'a nie mogła być używana przez BSD i projekt GNU, ze względu na jej licencję.
Wtedy oryginalny Unix nie miał licencji, a projekt GNU potrzebował powłoki, która była objęta GPL, więc użyli bash.
To samo dotyczy BSD4, nadrzędnego dla wszystkich BSD. Dzięki pozwie AT&T musieli przepisać wszystkie źródła oryginalnego Uniksa, w tym powłokę Bourne'a.
Z FreeBSD
man sh
Oba projekty musiały więc nie używać powłoki Bourne'a i zadowolić się prawdziwą powłoką open source.
źródło
Były inne problemy. Bourne Shell użył sbrk () zamiast malloc (), co spowodowało, że nie był zbyt przenośny.
Po tym, jak Bourne Shell stał się OpenSource poprzez OpenSolaris, stworzyłem wersję przenośną hafway, a później naprawdę przenośną, zastępując sbrk () przez malloc () przy pomocy Geoffa Collyera (tej samej osoby, która pomogła uniknąć sbrk () w Korn Shell).
Pierwszym powodem, dla którego stworzyłem przenośną wersję Bourne Shell, jest to, że lubiłem udostępniać edytor historii, który napisałem dla mojego „bsh” w latach 1982–1984, również w Bourne Shell. W międzyczasie przeniosłem większość unikalnych cech, które napisałem dla „bsh” do Bourne Shell.
Jest to między innymi:
Internetowa strona podręcznika znajduje się pod adresem : http://schillix.sourceforge.net/man/man1/bosh.1.html Źródła są częścią przybornika schily:
https://sourceforge.net/projects/schilytools/files/
Polecam użyć: http://sourceforge.net/projects/schilytools/files/schily-2015-08-18.tar.bz2 lub nowszej wersji.
PS Jestem zainteresowany opiniami
źródło
Jest powiązany z powłokami, które zapewniają 100% kompatybilność wsteczną . Nie tracisz nic, co ma oryginalna powłoka, ale zyskujesz na niej więcej funkcji. Nie ma wady, więc dlaczego przegapić nowe funkcje? Jest to ten sam powód, dla którego
/bin/vi
zwykle jest powiązany z vim .źródło
bash
jest znacznie wolniejszy niżdash
IFS=,; rm file1,file2,file3
usuną te 3 pliki z powłoki Bourne'a. Ta (głupia) funkcja została usunięta w POSIX sh. Istnieją dziesiątki subtelnych różnic, które mogą spowodować, że skrypt napisany dla powłoki Bourne'a będzie działał inaczej z sh POSIX.