Dlaczego bash jest domyślną powłoką w większości systemów operacyjnych?


38

Dlaczego bash jest domyślną powłoką w większości systemów operacyjnych (Ubuntu, Fedora, OSX itp.)? Dlaczego wielu zaawansowanych użytkowników korzysta głównie z zsh? Jeśli jest tak dobry, dlaczego nie jest domyślny?

Używam obu Nie widzę różnicy, bo wszystkie moje zadania są proste :)


5
Wszystko jest krzywą gaussowską: jeśli to prawda, że ​​używają kshją najbardziej zaawansowani użytkownicy , to prawdą jest również to, że większość ludzi używa innej powłoki, a to samo w sobie wyjaśniałoby, dlaczego kshnie jest domyślną powłoką. Jednak nie sądzę, że to jest powód, poczekajmy na jakąś zabójczą odpowiedź, która na pewno otrzyma to pytanie.
Kos

1
Właściwie uważam, że ubuntu używa domyślnej powłoki jako kreska ...
Bakuriu

1
To dobra odpowiedź, głosuję, że pozostawiamy to otwarte.
Seth

Odpowiedzi:


33

Przeczytałem o tym trochę i wniosek wydaje się być taki, że jest to domyślna powłoka GNU (używana przez większość systemów operacyjnych opartych na Linuksie), a zatem po prostu jest dostarczana jako część GNU, a jednocześnie ma 20 lat rozwoju, dzięki czemu stabilny i dobrze zaokrąglony, jest po prostu najlepszy wszechstronny, spełniający potrzeby wszystkich oprócz najbardziej zaawansowanych użytkowników.

Aby dowiedzieć się więcej, przeczytaj Dlaczego bash jest standardem w Linuksie? (to samo pytanie w systemach Unix i Linux).

Aby dodać nieco więcej, istnieje wiele innych powłok do wypróbowania, jeśli jesteś zainteresowany, oto kilka z tej odpowiedzi :

  • 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ą z luźnej rodziny 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 .


1
Kiedy kopiujesz i wklejasz rzeczy z innego miejsca, powinieneś wyraźnie zaznaczyć, że tak jest.
muru

1
@muru Podałem link do oryginalnego postu, ale widzę twój punkt widzenia, że ​​może być jaśniejszy.
Mark Kirby,

Jakie jest źródło twojego komentarza, że ​​zsh ma kilka dziwactw w odniesieniu do skryptów? Nieważne, widzę, że komentarz pochodzi z innego miejsca.
Skuter

1
Masz także ryby (co jest niezgodne ze składnią sh).
Léo Lam

1
Czy mógłbyś wyjaśnić, co było wadliwe w edycji powłoki Korna? Zawsze wydawało mi się, że działa dobrze, nawet w latach 90.
Jonathan Leffler

9

Bourne powłoki ( SH powrotem na dzień) branży AT & T Unix zostało udoskonalone i zastąpiona przez Korn, KSH . ksh również wyszedł z AT&T Bell Labs i nie był GPL (aktualna wersja to Eclipse Public License). Powłoka C, csh wyszła z Berxeyowskiej wersji Unixa i nie była również GPL (licencja BSD) i również używała innej składni niż sh. Z-shell, zsh to ulepszenie sh, ale nie GPL (licencja podobna do MIT). Bash był ulepszeniem sh, używał GPL i GNU. Tylko na samej licencji Bash byłby prawdopodobnie wyborem dla systemu operacyjnego GPL. Zwłaszcza, że ​​skorupa stanowi rdzeń dystrybucji.

Ale Bash był także projektem GNU, który, jak sądzę, zapewnia bardziej aktywny rozwój i sprawia, że ​​wkład jest łatwiejszy niż starszego produktu z Berkeley Unix lub AT&T Unix. Można bardzo dobrze uzasadnić, że zsh jest i był lepszą powłoką niż Bash, ale niewystarczająco, aby przezwyciężyć inną licencję i status projektu spoza GNU.

Kiedy dystrybucje Linuksa pojawiały się po raz pierwszy i wybierały domyślną powłokę (od początku do połowy lat 90.), nie było github (2008) ani nawet SourceForge (1999). W tym momencie myślę, że projekty GNU miały prawdziwą przewagę nad projektami spoza GNU, ponieważ zostały zauważone, a także przyciągnęły nowych programistów. Dystrybutorzy mogliby więc spojrzeć na powłokę Z jako lepszą, ale także oczekiwać, że Bash uzyska dobre wsparcie i konserwację w przyszłości, a także doda więcej funkcji, co pozwoli mu dogonić Zsha.

Teraz, gdy Bash ma lata domyślnego statusu, stał się standardem defacto, z książkami o nim napisanymi. Istnieje jedna książka, która obejmuje zarówno Bash, jak i Z-shell , ale żadna książka nie obejmuje wyłącznie Bash.

W tym momencie, jeśli dystrybucje miałyby zmienić ustawienia domyślne dla aktualizacji istniejącego systemu, zepsułoby to konfiguracje, ponieważ niektóre pliki inicjujące mają różne nazwy (np. .Bashrc kontra .zshrc), a zawartość plików może mieć niezgodną składnię. Dlatego bardzo niechętnie by to zrobili, pozostawiając nowe pliki do pobrania domyślnie zsh i uaktualnienia, aby mieć bash. Dwa różne ustawienia domyślne dla tej samej dystrybucji to coś, czego prawdopodobnie nie chcą obsługiwać, a użytkownicy / firmy również nie chcą sobie z tym poradzić.


1

Wszystkie języki powłoki Unix są brzydkie. Niektóre szczególnie ( csh), niektóre może nieco mniej ( ksh? Właściwie nie wiem), ale tak naprawdę, jeśli chodzi o aspekty takie jak czytelność i sztywność w dużych projektach, żaden z nich nie może zbliżyć się do dobrze zaprojektowanych języków ogólnego przeznaczenia, takich jak Python, C # lub Haskell. Tak więc, jeśli chcesz czegoś solidnego, nigdy nie wybierzesz żadnego z aromatów muszli.

Wybieraj je, gdy chcesz szybko wykonać proste czynności. W tym celu potrzebujesz:

  • Zwięzła składnia i wystarczająca spójność, aby można ją było zapamiętać (ciężko jest wyszukiwać stenograficzne operatory). Ma to duże znaczenie, jeśli twoja powłoka jest zainstalowana wszędzie, ponieważ naprawdę nie chcesz zapamiętać więcej niż jednego z tych potworów kludge.
  • Dobre funkcje interaktywne, dzięki czemu możesz włamać się bezpośrednio do terminala i zacząć działać bez konieczności przełączania się między wieloma plikami skryptów.
  • Możliwość pobrania dowolnego fragmentu skryptu z dowolnego miejsca i po prostu działa. shkompatybilność jest tutaj dużym plusem i po raz kolejny im bardziej popularny, tym lepiej.

Widzicie więc, popularność jest bardziej istotna w tych językach powłoki niż w przypadku języków ogólnego przeznaczenia. Dlatego nawet jeśli kshjest trochę „lepszy” jako język sam w sobie, nie ma tak naprawdę wielkiej przewagi w używaniu go, jeśli bashjest tylko nieco bardziej popularny (co było w odpowiednim sektorze, ponieważ po raz pierwszy wybrano go jako domyślny dla GNU).

Ludzie, którzy dokonują zmiany, są świadomi tego i mają wystarczające doświadczenie, aby łatwo poradzić sobie z przełączaniem na ulubioną powłokę. OTOH, nowicjusz, który jest zmuszony do pracy z mniej popularną powłoką, zostanie szybko zdezorientowany, jeśli poprosi internet o coś i to nie zadziała. Dlatego każda dystrybucja skierowana nie tylko do weteranów uniksowych wiąże się z pewnym ryzykiem, jeśli stanowi coś innego niż bashstandard, krok, z którego skorzystałoby stosunkowo niewiele osób (i tylko trochę).


1
Każdy język, który dba o ilość białych znaków, nie jest „dobrze zaprojektowany”, ale zgadzam się, że popularność jest kluczem.
Nagora,

1
@Nagora: opinie są różne. FWIW, zawsze możesz pisać Haskell za pomocą nawiasów klamrowych i średników zamiast białych znaków, i przypuszczam, że Python ma podobne awarie. Tylko nikt tego nie robi, ponieważ grupowanie oparte na wcięciach jest po prostu niesamowite pod względem czytelności.
leftaroundabout

1
  1. Było tam, kiedy było potrzebne
  2. Ma wystarczająco dużo słodyczy, że początkujący użytkownicy mogą spędzić tydzień na dostosowywaniu podpowiedzi.
  3. Typowe przypadki użycia są wystarczające (najczęściej uruchamiane jest jedno polecenie)
  4. Tam, gdzie nie jest wystarczająco dobrze perl, python i lua mogą podjąć się luzu.
  5. perl tworzy straszną interaktywną powłokę
  6. chociaż ryba, ksh lub zsh mogą teoretycznie być lepszą powłoką, nie mam wystarczającej poprawy, aby zawracać mi głowę, gdy Perl działa tak dobrze lub przenośność jest problemem, więc i tak skupiam się na desce rozdzielczej.

0

„Masa krytyczna” to główna odpowiedź, IMO. Bash służy nie tylko do pracy z wierszem poleceń, ale także do tworzenia skryptów i jest tam ogromna liczba skryptów Bash. Bez względu na to, o ile lepsza jest teraz alternatywa dla interakcji, potrzeba „plug and play” tych skryptów przeważa nad takimi zaletami. Jako taka, jedyną powłoką, która może teraz realistycznie odeprzeć Bash, jest ta, która jest całkowicie kompatybilna wstecz i najbardziej prawdopodobnym kandydatem do tego jest ... następna wersja Bash.


1
Możesz używać wszystkich skryptów bash, bez względu na to, jaka jest twoja domyślna powłoka. To właśnie oznacza she-bang (#! / Bin / bash) na górze skryptu.
Panther

1
@ bodhi.zazen Dopóki powłoka bash istnieje w systemie. Znam przynajmniej wersję Solaris, która nie zawiera bash.
Tulains Córdova,

@ bodhi.zazen Konieczność przełączania się między dwiema powłokami - jedną do interakcji, a drugą do skryptów - wiąże się z pewnym kosztem. Na ogół nie warto się tym przejmować.
Nagora,

1
@Nagora Jaki jest koszt psychiczny uruchomienia skryptu?
Kos

@kos, jeśli dosłownie uruchamiasz skrypty, żaden. Jeśli musisz utrzymywać i dostosowywać skrypty, musisz często pamiętać o dość niewielkich różnicach między różnymi podstawowymi powłokami, w którym to przypadku istnieje stały koszt metalu i koszt zmiany kontekstu, gdy trzeba wykonać trochę pracy w „inna” składnia.
Nagora,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.