Jaka jest różnica między terminami „Shell” i „Bash”?

11

Jaka jest różnica między „Shell” i „Bash” i co oznaczają te terminy?

O ile mi wiadomo, nie ma różnicy. Ale widziałem wiele książek o „Shell” i innych o „Bash”!

Jeśli więc chcę pracować z terminalem w systemie Mac OS X i napisać kilka skryptów bash, zastanawiam się, na jakie książki powinienem wybrać.

R.Hen
źródło
7
Jest to rozróżnienie między klasą a instancją.
Kaz.
1
Interesujący materiał do czytania: unix.stackexchange.com/questions/4126/…
Bernhard
1
pierwszą powłokę napisał facet o imieniu Bourne. BASH to skrót od „Boune Again Shell”. Ważne jest, aby dobrze się bawić!
Kinjal Dixit

Odpowiedzi:

31

Powłoka ” to dowolne oprogramowanie, które zapewnia interfejs do systemu operacyjnego. Na przykład explorer.exe jest domyślną powłoką w Windows (chociaż istnieją alternatywy ), a w OS X Finder zapewnia wiele takich samych funkcji. W systemie Linux / * nix powłoka może być częścią środowiska pulpitu (takiego jak Gnome lub KDE ) lub może być oddzielnym komponentem programowym na nim (takim jak Unity lub Cinnamon ).

Powyższe przykłady to wszystkie powłoki graficzne, które używają kombinacji okien, menu, ikon i innych takich elementów w celu zapewnienia graficznego interfejsu użytkownika (GUI), z którym można korzystać za pomocą kursora myszy. Jednak w kontekście oprogramowania takiego jak Bash lub pisania skryptów „powłoka” zwykle oznacza interpretera wiersza poleceń, który wykonuje te same obowiązki co powłoka graficzna, z tym że całkowicie opiera się na tekście.

Bash jest konkretnym przykładem powłoki wiersza poleceń i jest prawdopodobnie jedną z najbardziej znanych, domyślną w wielu dystrybucjach Linuksa oraz OS X. Został zaprojektowany jako zamiennik powłoki Bourne'a (Bash stoi dla „Bourne again shell”), jednej z pierwszych powłok uniksowych .

Przykłady powłok wiersza poleceń w systemie Windows obejmują cmd.exe (inaczej Wiersz polecenia) i PowerShell .

Indrek
źródło
3
Finder zwykle nie jest nazywany powłoką w systemie OS X. Większość funkcji GUI i zarządzania oknami jest obsługiwana przez inne procesy.
Lri
1
@LauriRanta Wikipedia wydaje się nie zgadzać . Niezależnie od tego, czy ma pomoc z innych procesów, jego zadaniem jest umożliwienie użytkownikowi interakcji z podstawowym systemem operacyjnym za pośrednictwem GUI, a zatem pasuje do opisu powłoki graficznej.
Indrek
1
Myślę, że termin powłoka graficzna może również odnosić się do aplikacji do zarządzania plikami. Ale nie jest to powszechnie używane w systemie OS X, a Finder bardziej przypomina Nautilus niż powłokę Windows lub Unity.
Lri
6
@LauriRanta: szybki quiz, jaka jest ikona Nautilusa?
Lie Ryan
2
@LauriRanta Czy dok nie byłby lepszym kandydatem na powłokę? Uruchamianie programów i otwieranie dokumentów, Expose / Spaces / Mission Control, AFAIK Launchpad oraz przełącznik zadań to wszystkie funkcje Docka.
Daniel Beck
13

Bash jest jedną z kilku powłok.

Powłoka w systemie uniksowym lub podobnym do Unixa, takim jak OSX lub Linux, to aplikacja, która udostępnia interfejs wiersza poleceń systemu operacyjnego, umożliwiając wpisywanie poleceń i uruchamianie ich. Istnieje wiele różnych powłok do wyboru, ale wszystkie zawierają wieloznaczne nazwy plików, potoki, dokumenty, podstawianie poleceń, zmienne i struktury kontrolne do testowania warunków i iteracji.

Oryginalną powłoką uniksową była powłoka Bourne'a , sh, napisana przez Stephena Bourne'a w Bell Labs. Potem pojawiła się powłoka C , napisana przez Billa Joya z Berkeley, od czasu aktualizacji jako tcsh . Inne powłoki obejmują powłokę Korna , ksh, napisaną przez Davida Korna, również w Bell Labs, oraz bash , „powłokę Bourne'a”, napisaną przez Briana Foxa dla projektu GNU jako darmowy zamiennik sh.

Dzisiaj bash jest prawdopodobnie najpopularniejszą powłoką uniksową, ale wiele osób (w tym ja) nadal preferuje powłokę C opartą na (jak niektórym z nas wydaje się) jej ładniejszej składni. Zasadniczo jest to kwestia gustu, dlatego polecam przeczytanie artykułów w Wikipedii, które podłączyłem, aby pomóc Ci zacząć.

Nicole Hamilton
źródło
2
Muszle niekoniecznie są oparte na wierszu poleceń, istnieje również wiele powłok graficznych, np. Nautilus, Windows Explorer, Finder itp. Zasadniczym punktem dla powłoki jest to, że jest to opakowanie / interfejs użytkownika / powłoka wokół podstawowych funkcji systemu operacyjnego / wywołań systemowych, tj. powłoki zapewniają zarządzanie zasobami (np. zarządzanie plikami) i zarządzanie procesami.
Lie Ryan
1
@LieRyan to nie są powłoki, to menedżery plików. Powłoki umożliwiają działanie zintegrowanych interpreterów poleceń / skryptów. Zobacz moją odpowiedź. Samo uruchomienie programu z menedżera plików nie czyni z niego powłoki.
Bill Rosmus
@BillR: Powinieneś poinformować facetów z Gnome Shell o swojej definicji.
paradroid
2
Jestem skłonny zgodzić się z Lie Ryanem i paradroidem, że powłoki graficzne są teraz uważane za powłoki. Jestem zainwestowany w paradygmat wiersza poleceń jak każdy i nie chciałem akceptować graficznych powłok jako powłok w latach 90. Ale ze wszystkimi widżetami panelu sterowania i tym, co nie jest w nowoczesnej powłoce graficznej, zgadzam się teraz, że powszechnym zastosowaniem jest nazywanie ich powłokami i że to użycie jest prawidłowe. Pasują do definicji powłoki, względnie cienkiej warstwy interfejsu użytkownika wokół podstawowego systemu operacyjnego. Powłoki graficzne są słabsze od tego, w jaki sposób ktokolwiek napisałby cokolwiek, ale wielu użytkowników nie przejmuje się tym.
Nicole Hamilton,
6

Termin „shell” jest dobrze nazwany. Jest to dosłownie powłoka wokół systemu operacyjnego, pozwalająca użytkownikowi na interakcję z komputerem. Kiedy został pierwotnie opracowany, było bardzo mało graficznych interfejsów użytkownika (bez okien :(). Wszystko zostało zrobione z linii poleceń. Ale nawet linia poleceń potrzebowała miejsca do życia. Żył i nadal działa w powłoce .

Mówiąc prościej, aby wiersz poleceń był użyteczny, potrzebował instrukcji, które mógłby wywołać. Tak więc programy zostały uruchomione w powłoce, aby można było z niej korzystać z wiersza poleceń. Programy były ściśle zgrupowane w swoich własnych pakietach i miały współpracować. Obejmują one programy takie jak „ls” i „grep”, „ps”, „sed” itp. Zawierają także polecenia przekierowania plików, takie jak „>” i „<” oraz potoki („|”). Co ważniejsze, obejmują one także konstrukcje programistyczne, takie jak operacje warunkowe (jeśli zatem, dla pętli, podczas gdy pętle, sposoby sprawdzania statusu zwróconego po uruchomieniu instrukcji (np. Jeśli uruchomisz „ls”, czy coś znalazło?), Rzecz tak). Są to podstawy bardziej złożonych skryptów wiersza poleceń (powłoki),

Kiedy ktoś używa terminu „Bash Shell”, mówi o interprecie wiersza poleceń o nazwie „Bash”, który działa w powłoce O / S. Można by pomyśleć, że jest to skrót od „Bash Shell Interpreter”. Istnieją inni tłumacze, tacy jak Bourne (Bash to „nowa i ulepszona powłoka Bourne'a, w skrócie Bourne Again Shell”). Istnieje również C-Shell, K-Shell (ulubiony przez wielu, którzy piszą złożone skrypty powłoki) oraz inne warianty GNU. Z biegiem lat zwyczajem stało się odwoływanie się do konkretnego interpretera wiersza poleceń, którego używasz jako powłoki, ponieważ jednego nie można używać bez drugiego. Ale w rzeczywistości są one różne.

Co do tego, dlaczego są oni właściwie znani jako interpretery wiersza poleceń, a nie jako rzeczywista powłoka: dzieje się tak dlatego, że żyją w powłoce i interpretują wszystkie polecenia tak, jakby działały w programie. A powłoka nie dba o tłumacza, który w nim działa, o ile spełnia ona odpowiednie standardy.

A dlaczego nazywają się tłumaczami, to dlatego, że są naprawdę tłumaczami. Nawet jeśli nie uruchamiasz jawnie skryptu (a skrypt jest tak naprawdę plikiem tekstowym poleceń, które tworzysz, abyś mógł wykonywać te same polecenia w kółko, bez konieczności ich ponownego wpisywania). Na przykład weź pokorne polecenie „ls”. Po uruchomieniu zwraca listę plików. Ale to, jak działa, jest ważniejsze dla twojego pytania: w rzeczywistości działa w kontekście interpretera wiersza poleceń, nawet jeśli po prostu uruchomisz coś, co wydaje się prostym, jednorazowym poleceniem. Oznacza to, że działa jak oświadczenie w ramach większego programu. Działa tak, jakby znajdował się w pliku skryptu powłoki, ale tak naprawdę nie znajduje się w pliku skryptu powłoki. Anonimowy plik skryptu powłoki.

Wszystko, co uruchamiasz w wierszu poleceń, ma to wspólnego (niezależnie od tego, czy jest to pojedyncze polecenie, takie jak „ls”, czy plik skryptowy pełen poleceń, iteratorów i instrukcji warunkowych): wszystko jest przetwarzane przez interpreter wiersza poleceń; czy to Bash, C-Shell, K-Shell (domyślnie w AIX btw).

Aby zobaczyć, co mam na myśli, wykonaj „test” katalogu:

mkdir test

Wpisz go i uruchom następujące polecenia

grep hello * 

Otrzymasz odpowiedź w rodzaju „brak takiego pliku lub katalogu”. Teraz wpisz polecenie

echo $?

($? mówi, powiedz mi, co znalazłeś w mowie zaszyfrowanego komputera.) Powinieneś zobaczyć, że zwraca liczbę (powinna być) „2”. To jest kod powrotu z grep, który oznacza „brak takiego pliku lub katalogu”. Teraz uruchom następujące polecenie:

echo hello > hello.txt
grep hello *
echo $?

Zobaczysz plik „hello.txt” zwrócony z początkowej komendy grep i powinieneś teraz zobaczyć „echo $?” zwraca liczbę „0”, co oznacza, że ​​faktycznie coś znalazło.

Nawet jeśli te pozornie jednorazowe polecenia są uruchamiane, interpreter wiersza poleceń działa tak, jakby był częścią większego programu i śledzi ich zwracane wartości. Dlatego jeśli zapomnisz * na końcu polecenia grep, nie powróci. Wie, że instrukcja jest niekompletna i oczekuje więcej danych wejściowych. W końcu możesz poprosić go o pomijanie wyników jakiejś pętli, której pisanie i uruchamianie w wierszu poleceń jest całkowicie legalne.

Najważniejsze jest to, że powłoka jest powłoką, a interpreter (bez względu na to, jakiej używasz, „Bash”, k-shell itp.) Jest inny. Ale często są one używane zamiennie, ponieważ w dowolnym momencie są całkowicie ze sobą powiązane.

Bill Rosmus
źródło
2

Shell to tekstowy interfejs użytkownika.

Bash jest rodzajem powłoki.

HayekSplosives
źródło
2
Co to jest „oparty na testach interfejs użytkownika”? Przydałoby się również trochę rozszerzyć swoją odpowiedź. Jak widać z innych odpowiedzi, zawsze pomaga dać więcej kontekstu.
slhck 18.10.12
Przepraszam. Tekstowy interfejs użytkownika. Jak chciałbyś, żebym to wyjaśnił? Powłoka to metoda wiersza poleceń umożliwiająca interakcję z jądrem systemu operacyjnego. Powłoka interpretuje twoje polecenia i przekazuje je do maszyny, która następnie wykonuje niezbędne operacje związane z wydanym poleceniem? Bez 500-stronicowego podręcznika trudno jest skutecznie wyjaśnić to dwuznaczne pytanie. Wysiłek odpowiedzi odpowiada nakładowi pytania. To pytanie dotyczy jabłek i pomarańczy.
HayekSplosives
Jeśli uważasz, że pytanie pokazuje teraz wysiłek, który nie oznacza automatycznie, że nie powinieneś wkładać wysiłku w odpowiedź na to pytanie. W twojej odpowiedzi, w porównaniu do innych, brakuje drobnych szczegółów. Oczywiście to od Ciebie zależy, czy to dodasz.
slhck 18.10.12
Doceniam korektę i lekcję osobistej odpowiedzialności. Dziękujemy za ochronę tych, którzy nie chcą wkładać wysiłku w to, co robią. Zupełnie nie zgadzam się z tym, ile jestem winien plakatowi.
HayekSplosives,
1

bash jest jedną z wielu istniejących powłok.

Wszystkie muszle mają swoje podobieństwa i różnice. Na przykład skrypt napisany w języku bash może być w pełni lub w dużej mierze kompatybilny z inną powłoką (na przykład zsh ).

Ze względu na to, że bashjest bardzo rozpowszechniony, często sugeruje się, że skrypt jest z nim zgodny.

Jeśli chcesz kupić książkę, kup ją napisaną specjalnie dla powłoki, której zamierzasz użyć. Byłoby jednak dobrym pomysłem zapoznać się z ich różnicami przed wydaniem pieniędzy.

dset0x
źródło