Dlaczego bash jest standardem w Linuksie?

19

Najnowsze dystrybucje Linuksa zawierają domyślną powłokę bash, chociaż istnieją inne (prawdopodobnie) lepsze powłoki.

Próbuję zrozumieć, czy jest to jakaś historyczna pozostałość, której nikt nie chce zmienić, czy są jakieś dobre powody, które sprawiają, że bash jest pierwszym wyborem?

Milan Babuškov
źródło
19
Większość komputerów jest sprzedawana z zainstalowanym MS Windows, chociaż istnieją inne, prawdopodobnie lepsze systemy operacyjne.
choroba
Bash jest prosty. Zwykle może zrobić wszystko, co użytkownik chce. Możesz łatwo to zmienić. Domyślnie scsh nie będzie fajne.
CND
4
Bash to implementacja OSS standardu UNIX /bin/sh, który jest domyślną powłoką w „normalnym” systemie UNIX-es ...
Jan Marek
Znam ten link wiki, ale odpowiedzi na swoje pytanie w głębi, co jeden pocisk ma niż inne en.wikipedia.org/wiki/Unix_shell
whoami
6
Proszę zdefiniować (prawdopodobnie) lepiej . Myślę, że bashto najlepsza powłoka, ponieważ znam ją dobrze i jest wszędzie, robi wszystko, czego potrzebuję zwięźle i stosunkowo łatwo, jest czytelna i może być w pewnym stopniu zrozumiana przez ludzi bez wiedzy, jak tworzyć skrypty bash. Czego jeszcze chcesz od muszli? Jeśli chcesz mieć wiele funkcji programowania, używasz powłoki niepoprawnie.
nicerobot

Odpowiedzi:

18

Krótka odpowiedź brzmi, ponieważ linux to tak naprawdę GNU / Linux. Tylko jądro jest linuxem, ale podstawowa kolekcja narzędzi zapewniających środowisko uniksowe jest dostarczana przez GNU, a powłoka GNU jest bash
Jak już powiedziałem, to krótka odpowiedź;)

edytowane w celu dodania dodatkowego komentarza ...
Pozwolę sobie powiedzieć, że nie jestem historykiem uniksowym, więc mogę odpowiedzieć tylko IMHO

Kilka punktów, przede wszystkim bash, to zlew kuchenny z muszli, podobnie jak emacs dla redaktorów.
W momencie wydania bash nie było żadnych darmowych implementacji ksh, tcsh był darmowym zamiennikiem csh, ale Stallman miał rację przeciwko csh do programowania powłoki.
Jako interaktywna powłoka bash miała doskonałe przywołanie historii / poleceń, a także zapisywanie historii między sesjami. To był spadek w zastępstwie sh, bsh, ksh do programowania powłoki i stworzony dla przyzwoitej interaktywnej powłoki.
Podobnie jak śnieżka tocząca się w dół, uderzenie nabiera tempa i wielkości.

Tak, istnieją dziesiątki innych pocisków; skorupy, które lepiej nadają się do indywidualnego celu lub smaku, ale dla pojedynczego bashu skorupa wykonuje przyzwoitą robotę i ma na nią wiele oczu od ponad 20 lat.

bsd
źródło
Rozumiem. Jednak większość dystrybucji obejmuje wiele innych programów innych niż GNU. Wydaje mi się, że bash jest używany tylko dlatego, że jest używany, tak jak choroba skomentowana przez Windows jako dominujący system operacyjny. Jednak przez dziesięciolecia system Windows miał lepszą obsługę sprzętu (sterowniki), co utrudniało przejście na inny system operacyjny. Nie widzę, jaką unikalną funkcję oferuje Bash, aby uniemożliwić użytkownikom przełączanie się?
Milan Babuškov
+1 i dobry @bdowning za krótką i prostą odpowiedź :-)
Nikhil Mulley
2
@ MilanBabuškov Bash musi być zainstalowany, ponieważ istnieje zbyt wiele skryptów, które używają funkcji specyficznych dla bash. Kiedy zaczniesz od tego założenia, musisz uzasadnić dodatkowe pociski. Dash został włączony do takich dystrybucji jak Ubuntu w ramach planu skrócenia czasu uruchamiania. Biorąc pod uwagę, że bash jest „wystarczająco dobry” jako interaktywna powłoka, żadna inna powłoka nie podała jeszcze wystarczająco mocnego argumentu, aby być częścią domyślnego pakietu.
ssokolow
12

Bash ma kilku potencjalnych konkurentów:

  • Zsh ma bardziej zaawansowane funkcje interaktywne, ale kilka dziwactw, jeśli chodzi o skrypty (teraz mniej niż teraz). Na początku do połowy lat 90., kiedy Linux był w powijakach, zsh był praktycznie nieznany.
  • Ksh był de facto standardem w komercyjnych jednorożcach od połowy lat osiemdziesiątych, ale było to oprogramowanie zastrzeżone do 2000 roku, więc nie jest opcją dla Linuksa. Ponadto, ksh miał niższe możliwości edycji linii poleceń, w porównaniu z bash.
  • Pdksh , darmowy klon ksh, byłby opcją, ale nie był dobrze znany i miał słabe możliwości edycji wiersza poleceń. (Pdksh nie jest już bardzo aktywnym projektem, mimo że nadal jest używany w niektórych BSD, teraz, gdy ATT ksh jest darmowy.)
  • Niektóre dystrybucje instalują wariant popiołu jako /bin/sh. Ash (rozumiem przez to dowolną luźną rodzinę muszli zwaną ash) został zaprojektowany jako mały i szybki, bez interaktywnych funkcji (służy tylko do edycji skryptów). Odrodzenie popiołu jest stosunkowo nowe; w latach 90. istniejącym wariantom brakowało wielu funkcji.
  • Tcsh był najbardziej zaawansowaną interaktywną powłoką, dopóki nie pojawił się zsh, ale jest niekompatybilny z sh i nie tak dobrze ze skryptami .

Co więcej, bash jest oficjalną powłoką GNU , a systemy Linux to tak naprawdę GNU / Linux : wiele podstawowych programów pochodzi z GNU, nawet jeśli najbardziej znana część, jądro Linuksa, nie. W momencie, gdy stał się de facto standardem, bash był dobrze znany, miał oficjalny status i miał przyzwoity zestaw funkcji.

Gilles „SO- przestań być zły”
źródło
Jak rozumiem, standard POSIX określa wymagane funkcje powłoki Bourne'a w / bin / sh, a większość dystrybucji Linuksa zależy od skryptów powłoki napisanych w celu użycia powłoki Bourne. BASH jest u podstaw ulepszoną wersją powłoki Bourne'a, a / bin / sh jest tak naprawdę linkiem do / bin / bash, który po uruchomieniu działa tylko z funkcjami powłoki Bourne'a.
bgvaughan
@bgvaughan Niektóre dystrybucje wysyłają bash as /bin/sh, inne wysyłają popiół. Na przykład Ubuntu /bin/shjest dash(widelec popiołu obsługiwany przez Debiana) przez jakiś czas. Bash ma więcej funkcji, popiół jest mniejszy i szybszy. Oba są zgodne z POSIX (lub przynajmniej są wystarczająco zgodne w praktyce).
Gilles „SO- przestań być zły”
4

Najprostsza odpowiedź? Ponieważ coś „musi być” domyślnym. Najbardziej sensownym domyślnym jest ten, z którym większość użytkowników już się czuje. Pod tym względem Bash jest dobrym wyborem. Każdy ma swobodę wyboru tego, co najlepsze w swoim świecie. Większość wybierze opcję domyślną, jeśli zawsze zrobiła to, czego potrzebują.

BentFX
źródło
3

Pochodzę z DOS (z zainstalowanym doskey) Naprawdę brakowało mi funkcji przypominania ostatnich poleceń, po prostu przesuwając kursor w górę / w dół. BASH był IMO pierwszą powłoką, która zaimplementowała to w * nix.

Więc prawdopodobnie większość facetów z tego pokolenia lubiła bash.

Nils
źródło
Chociaż nie korzystałem z komputera aż do lat 90., założyłem, że tcshbyła to pierwsza powłoka * nix, która używa klawiszy strzałek do poruszania się po historii powłoki.
Anthony G - sprawiedliwość dla Moniki
1

Wszystkie pozostałe odpowiedzi są świetne, ale z praktycznego punktu widzenia: jeśli usiądę przed nieznanym systemem (lub uzyskam do niego dostęp zdalnie) i będę musiał coś zrobić, mogę liczyć na to, że bash będzie dostępny na wszystkich systemach oprócz najstarszych. Mogę po prostu iść naprzód i załatwić sprawę.

Jak wskazano w innych odpowiedziach i pytaniu, istnieje wiele innych powłok (słyszę wiele dobrych rzeczy na temat Zsh, ale nie próbowałem tego), ale różnią się one pod względem składni i czasami używanych poleceń doprowadzanie pracy do końca. Jeśli chcę po prostu coś zrobić, bash jest wystarczająco trudny bez konieczności dostosowywania się do innej powłoki.

Ponadto, gdy piszę skrypt powłoki, który może być ogólnie przydatny, piszę go dla bashu i wiem, że jeśli będę bardzo ostrożny, aby nie robić rzeczy zależnych od systemu, uruchomi się on prawie wszędzie.

Joe
źródło
1

Bezwładność.

Bash był najłatwiej dostępną darmową powłoką, kiedy zaczęły pojawiać się systemy Linux (GNU / Linux, jeśli wolisz). Fakt, że pochodzi z projektu GNU, nie zaszkodził.

Co do tego, dlaczego wciąż jest domyślną powłoką, nigdy nie było wystarczającego powodu, aby ją zmienić. Nawet jeśli jakaś inna powłoka jest lepsza, istnieją zalety posiadania tej samej domyślnej powłoki logowania w różnych dystrybucjach i trudno byłoby przekonać wszystkich (Debian, Red Hat, Suse itp.) Do zgody na przejście na coś innego.

A przecież to tylko domyślna. Każdy użytkownik może użyć chshdo zmiany swojej powłoki logowania. Nie trzeba zmieniać wartości domyślnej dla wszystkich.

Keith Thompson
źródło