Podczas pisania programów powłoki często używamy /bin/sh
i /bin/bash
. Zwykle używam bash
, ale nie wiem, jaka jest między nimi różnica.
Jaka jest główna różnica między bash
i sh
?
O czym musimy pamiętać, programując w bash
i sh
?
Podczas pisania programów powłoki często używamy /bin/sh
i /bin/bash
. Zwykle używam bash
, ale nie wiem, jaka jest między nimi różnica.
Jaka jest główna różnica między bash
i sh
?
O czym musimy pamiętać, programując w bash
i sh
?
Odpowiedzi:
sh
(lub Shell Command Language) to język programowania opisany przez standard POSIX . Posiada wiele wdrożeń ( ksh88
, dash
...). bash
można również uznać za wdrożenie sh
(patrz poniżej).
Ponieważ sh
specyfikacja, a nie implementacja, /bin/sh
jest dowiązaniem symbolicznym (lub dowiązaniem twardym) do rzeczywistej implementacji w większości systemów POSIX.
bash
zaczęło się jako sh
implementacja kompatybilna (chociaż wyprzedza standard POSIX o kilka lat), ale z czasem zyskała wiele rozszerzeń. Wiele z tych rozszerzeń może zmienić zachowanie prawidłowych skryptów powłoki POSIX, więc samo w sobie bash
nie jest prawidłową powłoką POSIX. Jest to raczej dialekt języka powłoki POSIX.
bash
obsługuje --posix
przełącznik, co czyni go bardziej zgodnym z POSIX. Próbuje także naśladować POSIX, jeśli zostanie wywołany jako sh
.
Przez długi czas /bin/sh
wskazywał /bin/bash
na większość systemów GNU / Linux. W rezultacie zignorowanie różnicy między nimi stało się prawie bezpieczne. Ale to zaczęło się ostatnio zmieniać.
Niektóre popularne przykłady systemów, na które /bin/sh
nie wskazuje /bin/bash
(a niektóre z nich /bin/bash
mogą nawet nie istnieć) to:
sh
do dash
których domyślnie prowadzi dowiązanie symboliczne ;initramfs
. Wykorzystuje ash
implementację powłoki.pdksh
, potomek powłoki Korna. FreeBSD sh
jest potomkiem oryginalnej powłoki UNIX Bourne. Solaris ma swój własny, sh
który przez długi czas nie był zgodny z POSIX; darmowa implementacja jest dostępna z projektu Heirloom .Jak dowiedzieć się, na co /bin/sh
wskazuje twój system?
Problem polega na tym, że /bin/sh
może to być dowiązanie symboliczne lub dowiązanie twarde. Jeśli jest to łącze symboliczne, przenośnym sposobem jego rozwiązania jest:
% file -h /bin/sh
/bin/sh: symbolic link to bash
Jeśli jest to twardy link, spróbuj
% find -L /bin -samefile /bin/sh
/bin/sh
/bin/bash
W rzeczywistości -L
flaga obejmuje zarówno dowiązania symboliczne, jak i dowiązania twarde, ale wadą tej metody jest to, że nie jest przenośna - POSIX nie wymaga find
obsługi -samefile
opcji, chociaż zarówno GNU find, jak i FreeBSD ją obsługują.
Ostatecznie to Ty decydujesz, którego użyć, pisząc linię «shebang» jako pierwszą linię skryptu.
Na przykład
#!/bin/sh
użyje sh
(i cokolwiek innego, co wskaże),
#!/bin/bash
użyje, /bin/bash
jeśli jest dostępny (i zakończy się niepowodzeniem z komunikatem o błędzie, jeśli nie jest). Oczywiście możesz również określić inną implementację, np
#!/bin/dash
W przypadku moich własnych skryptów wolę sh
z następujących powodów:
bash
, trzeba to miećsh
Istnieją również zalety korzystania z niego bash
. Jego funkcje sprawiają, że programowanie jest wygodniejsze i podobne do programowania w innych współczesnych językach programowania. Należą do nich takie zmienne lokalne i tablice o zasięgu. Zwykły sh
to bardzo minimalistyczny język programowania.
bash
wyświetlaczem, bardziej przydatne komunikaty o błędach w przypadku błędu składniowego. Możesz po prostu zaoszczędzić czas, używając bash.
%
znaczy na początku linii poleceń?
$
zamiast %
lub #
dla powłoki root.
$
i #
...
sh
istniało na długo przed bash (co oznacza bourne-znowu shell). Ale był bardzo prymitywny i nie reagował na zdarzenia końcowe, takie jak ESC
postacie. Potem ksh
przyszedł (także przed bash), a potem bash rozpoczęli ci, którzy uwielbiali ideę lepszej powłoki, ale nienawidzili ksh. :-)
sh
: http://man.cx/sh
bash
: http://man.cx/bash
TL; DR : bash
jest nadzbiorem o sh
bardziej eleganckiej składni i większej funkcjonalności. Korzystanie z linii shebang bash jest bezpieczne w prawie wszystkich przypadkach, ponieważ jest dość wszechobecne na nowoczesnych platformach.
Uwaga: w niektórych środowiskach sh
jest bash
. Sprawdzić sh --version
.
To pytanie było często nominowane jako kanoniczne dla osób, które próbują go użyć sh
i są zaskoczone, że nie zachowuje się tak samo jak bash
. Oto krótki przegląd typowych nieporozumień i pułapek.
Po pierwsze, powinieneś zrozumieć, czego się spodziewać.
sh scriptname
lub scriptname
masz go #!/bin/sh
w linii shebang , powinieneś oczekiwać sh
zachowania POSIX .bash scriptname
lub scriptname
masz go #!/bin/bash
(lub lokalny odpowiednik) w linii shebang, powinieneś spodziewać się zachowania Bash.Posiadanie poprawnego shebang i uruchamianie skryptu poprzez wpisanie tylko nazwy skryptu (ewentualnie z względną lub pełną ścieżką ) jest ogólnie preferowanym rozwiązaniem. Oprócz poprawnego shebang wymaga to, aby plik skryptu miał uprawnienia do wykonywania ( chmod a+x scriptname
).
Czym się właściwie różnią?
Podręcznik Bash Reference zawiera sekcję, która próbuje wyliczyć różnice, ale niektóre z powszechnych źródeł nieporozumień obejmują
[[
nie jest dostępny w sh
(tylko ten, [
który jest bardziej niezgrabny i ograniczony).sh
nie ma tablic.local
, source
, function
, shopt
, let
, declare
, i select
nie są przenośne do sh
. (Niektóre sh
implementacje obsługują np local
.)for((i=0;i<=3;i++))
pętla +=
trzyargumentowa, przypisanie przyrostu itp. Ta $'string\nwith\tC\aescapes'
funkcja jest wstępnie akceptowana dla POSIX (co oznacza, że działa teraz w Bash, ale nie będzie jeszcze obsługiwana sh
w systemach, które stosują się tylko do bieżącego Specyfikacja POSIX i prawdopodobnie nie będzie jeszcze przez pewien czas).<<<'here strings'
.*.{png,jpg}
i {0..12}
rozwija nawias klamrowy.~
odnosi się $HOME
tylko do Bash (i bardziej ogólnie ~username
do katalogu domowego username
)./bin/sh
implementacji wcześniejszych niż POSIX .<(cmd)
i >(cmd)
.&|
for 2>&1 |
i &>
for> ... 2>&1
<>
przekierowaniem.${substring:1:2}
, ${variable/pattern/replacement}
konwersja wielkości liter itp.$[expression]
składnia starszego typu, którą jednak należy zastąpić $((expression))
składnią arytmetyczną POSIX . ( sh
Jednak niektóre starsze implementacje sprzed POSIX-a mogą tego nie obsługiwać).$RANDOM
, $SECONDS
, $PIPESTATUS[@]
i $FUNCNAME
są rozszerzeniami bash.export variable=value
i [ "x" == "y" ]
które nie są przenośne ( export variable
powinny być oddzielne od przypisywania zmiennych, a przenośne porównywanie ciągów [ ... ]
używa pojedynczego znaku równości).Pamiętaj, że jest to skrócona lista. Pełna instrukcja znajduje się w podręczniku użytkownika, a http://mywiki.wooledge.org/Bashism zawiera wiele dobrych obejść; i / lub wypróbuj http://shellcheck.net/, który ostrzega przed wieloma funkcjami tylko Bash.
Częstym błędem jest posiadanie #!/bin/bash
linii shebang, ale mimo sh scriptname
to uruchamianie skryptu. Zasadniczo wyłącza to funkcjonalność tylko Bash, więc pojawiają się błędy składniowe, np. Przy próbie użycia tablic. (Linia shebang jest składniowo komentarzem, więc w tym scenariuszu jest po prostu ignorowana).
Niestety, Bash nie ostrzeże, gdy spróbujesz użyć tych konstrukcji, gdy zostanie wywołany jako sh
. Nie wyłącza też całkowicie wszystkich funkcji tylko Bash, więc uruchomienie Bash przez jego wywołanie, ponieważ sh
nie jest to dobry sposób na sprawdzenie, czy twój skrypt jest odpowiednio przenośny do ash
/ dash
/ POSIX sh
lub wariantów takich jak Heirloomsh
export variable=value
jest upoważniony przez POSIX: pubs.opengroup.org/onlinepubs/009695399/utilities/export.html . Być może nie jest dostępny w niektórych starożytnych pociskach, ale zdecydowanie nie jest to bzdura.
Shell to interfejs między użytkownikiem a systemem operacyjnym umożliwiający dostęp do usług systemu operacyjnego. Może to być GUI lub CLI (interfejs wiersza poleceń).
sh (Bourne sh ell) to interpreter wiersza poleceń powłoki dla systemów operacyjnych Unix / podobnych do Unixa. Zapewnia niektóre wbudowane polecenia. W języku skryptowym oznaczamy tłumacza jako #!/bin/sh
. Był to jeden z najczęściej obsługiwanych przez inne powłoki, takie jak bash (wolny / otwarty), kash (nie wolny).
Bash ( B ourne danej zyskać s piekła) jest zastąpienie powłoki dla powłoki Bourne. Bash jest nadzbiorem sh. Bash obsługuje sh. POSIX to zestaw standardów określających sposób działania systemów zgodnych z POSIX. Bash nie jest w rzeczywistości powłoką zgodną z POSIX. W języku skryptowym oznaczamy tłumacza jako #!/bin/bash
.
Analogia:
sh
(więc jest to „podklasa” w sensie OOP) i rozszerza ją (więc ma nadzbiór funkcjonalności).
Wpis z UNIX.COM
Funkcje powłoki
W poniższej tabeli wymieniono większość funkcji, które moim zdaniem sprawiłyby, że wybrałeś jedną powłokę nad drugą. Nie ma być ostateczną listą i nie obejmuje każdej możliwej funkcji dla każdej możliwej powłoki. Funkcja jest uważana za znajdującą się w powłoce tylko w wersji dostarczonej z systemem operacyjnym lub jeśli jest dostępna jako skompilowana bezpośrednio ze standardowej dystrybucji. W szczególności podana poniżej powłoka C jest dostępna w systemie SUNOS 4. *, znaczna liczba dostawców obecnie wysyła zamiast niej tcsh lub własną ulepszoną powłokę C (nie zawsze widać, że wysyłają tcsh.
Kod:
sh csh ksh bash tcsh zsh rc es
Job control N Y Y Y Y Y N N
Aliases N Y Y Y Y Y N N
Shell functions Y(1) N Y Y N Y Y Y
"Sensible" Input/Output redirection Y N Y Y N Y Y Y
Directory stack N Y Y Y Y Y F F
Command history N Y Y Y Y Y L L
Command line editing N N Y Y Y Y L L
Vi Command line editing N N Y Y Y(3) Y L L
Emacs Command line editing N N Y Y Y Y L L
Rebindable Command line editing N N N Y Y Y L L
User name look up N Y Y Y Y Y L L
Login/Logout watching N N N N Y Y F F
Filename completion N Y(1) Y Y Y Y L L
Username completion N Y(2) Y Y Y Y L L
Hostname completion N Y(2) Y Y Y Y L L
History completion N N N Y Y Y L L
Fully programmable Completion N N N N Y Y N N
Mh Mailbox completion N N N N(4) N(6) N(6) N N
Co Processes N N Y N N Y N N
Builtin artithmetic evaluation N Y Y Y Y Y N N
Can follow symbolic links invisibly N N Y Y Y Y N N
Periodic command execution N N N N Y Y N N
Custom Prompt (easily) N N Y Y Y Y Y Y
Sun Keyboard Hack N N N N N Y N N
Spelling Correction N N N N Y Y N N
Process Substitution N N N Y(2) N Y Y Y
Underlying Syntax sh csh sh sh csh sh rc rc
Freely Available N N N(5) Y Y Y Y Y
Checks Mailbox N Y Y Y Y Y F F
Tty Sanity Checking N N N N Y Y N N
Can cope with large argument lists Y N Y Y Y Y Y Y
Has non-interactive startup file N Y Y(7) Y(7) Y Y N N
Has non-login startup file N Y Y(7) Y Y Y N N
Can avoid user startup files N Y N Y N Y Y Y
Can specify startup file N N Y Y N N N N
Low level command redefinition N N N N N N N Y
Has anonymous functions N N N N N N Y Y
List Variables N Y Y N Y Y Y Y
Full signal trap handling Y N Y Y N Y Y Y
File no clobber ability N Y Y Y Y Y N F
Local variables N N Y Y N Y Y Y
Lexically scoped variables N N N N N N N Y
Exceptions N N N N N N N Y
Klucz do powyższej tabeli.
Funkcję Y można wykonać za pomocą tej powłoki.
Funkcja N nie jest obecna w powłoce.
F Funkcję można wykonać tylko przy użyciu mechanizmu funkcji powłok.
L Biblioteka readline musi być połączona z powłoką, aby włączyć tę funkcję.
Uwagi do powyższej tabeli
1. This feature was not in the original version, but has since become
almost standard.
2. This feature is fairly new and so is often not found on many
versions of the shell, it is gradually making its way into
standard distribution.
3. The Vi emulation of this shell is thought by many to be
incomplete.
4. This feature is not standard but unofficial patches exist to
perform this.
5. A version called 'pdksh' is freely available, but does not have
the full functionality of the AT&T version.
6. This can be done via the shells programmable completion mechanism.
7. Only by specifying a file via the ENV environment variable.
TERMINAL
MUSZLA
SH vs. GRZMOTNĄĆ
SH
GRZMOTNĄĆ
MATERIAŁ REFERENCYJNY:
SHELL gnu.org:
U podstawy powłoka jest po prostu makroprocesorem, który wykonuje polecenia. Termin makroprocesor oznacza funkcjonalność polegającą na rozszerzaniu tekstu i symboli w celu tworzenia większych wyrażeń.
Powłoka uniksowa to zarówno interpreter poleceń, jak i język programowania. Jako interpreter poleceń powłoka zapewnia interfejs użytkownika dla bogatego zestawu narzędzi GNU. Funkcje języka programowania pozwalają łączyć te narzędzia. Pliki zawierające polecenia można tworzyć i same stać się poleceniami. Te nowe polecenia mają taki sam status, jak polecenia systemowe w katalogach takich jak / bin, umożliwiając użytkownikom lub grupom tworzenie niestandardowych środowisk w celu automatyzacji ich typowych zadań.
Muszle mogą być używane interaktywnie lub nieinteraktywnie. W trybie interaktywnym akceptują dane wpisywane z klawiatury. Podczas wykonywania w sposób nieinteraktywny powłoki wykonują polecenia odczytane z pliku.
Powłoka umożliwia wykonywanie poleceń GNU, zarówno synchronicznie, jak i asynchronicznie. Powłoka czeka na zakończenie poleceń synchronicznych, zanim zaakceptuje więcej danych wejściowych; polecenia asynchroniczne są wykonywane równolegle z powłoką, podczas gdy odczytuje i wykonuje dodatkowe polecenia. Konstrukcje przekierowujące umożliwiają precyzyjną kontrolę wejścia i wyjścia tych poleceń. Ponadto powłoka pozwala kontrolować zawartość środowiska poleceń.
Powłoki zapewniają również niewielki zestaw wbudowanych poleceń (wbudowanych) implementujących funkcje niemożliwe lub niewygodne do uzyskania za pomocą oddzielnych narzędzi . Na przykład cd, break, Continue i exec nie mogą być implementowane poza powłoką, ponieważ bezpośrednio manipulują samą powłoką. Wbudowane funkcje historii, getopts, kill lub pwd mogą być zaimplementowane w osobnych narzędziach, ale wygodniej jest ich używać jako poleceń wbudowanych. Wszystkie wbudowane powłoki zostały opisane w kolejnych sekcjach.
Podczas gdy wykonywanie poleceń jest niezbędne, większość mocy (i złożoności) powłok wynika z ich wbudowanych języków programowania. Jak każdy język wysokiego poziomu, powłoka udostępnia zmienne, konstrukcje kontroli przepływu, cytowanie i funkcje.
Powłoki oferują funkcje ukierunkowane specjalnie na użytek interaktywny, a nie na rozszerzenie języka programowania. Te interaktywne funkcje obejmują kontrolę zadań, edycję wiersza poleceń, historię poleceń i aliasy. Każda z tych funkcji jest opisana w tym podręczniku.
BASH gnu.org:
Bash jest powłoką lub interpretatorem języka poleceń dla systemu operacyjnego GNU. Nazwa jest akronimem „Bourne-Again SHell”, gry słów Stephena Bourne'a, autora bezpośredniego przodka obecnej wersji powłoki uniksowej sh, która pojawiła się w siódmej edycji Bell Labs Research w wersji Unix.
Bash jest w dużej mierze kompatybilny z sh i zawiera przydatne funkcje z Ksh powłoki Korn i csh powłoki C. Ma być zgodną implementacją części IEEE POSIX Shell and Tools specyfikacji IEEE POSIX (IEEE Standard 1003.1). Oferuje ulepszenia funkcjonalne w stosunku do sh zarówno do użytku interaktywnego, jak i programowania.
Podczas gdy system operacyjny GNU udostępnia inne powłoki, w tym wersję csh, Bash jest powłoką domyślną . Podobnie jak inne oprogramowanie GNU, Bash jest dość przenośny. Obecnie działa na prawie każdej wersji Uniksa i kilku innych systemach operacyjnych - istnieją niezależnie obsługiwane porty dla MS-DOS, OS / 2 i platform Windows.
Inne odpowiedzi ogólnie wskazywały na różnicę między Bash a standardem powłoki POSIX. Jednak podczas pisania przenośnych skryptów powłoki i przyzwyczajania się do składni Bash, lista typowych bashizmów i odpowiadających im czystych rozwiązań POSIX jest bardzo przydatna. Taka lista została opracowana, gdy Ubuntu przełączyło się z Bash na Dash jako domyślna powłoka systemowa i można ją znaleźć tutaj: https://wiki.ubuntu.com/DashAsBinSh
Ponadto istnieje świetne narzędzie o nazwie checkbashisms, które sprawdza skrypty w skrypcie i jest przydatne, gdy chcesz się upewnić, że twój skrypt jest przenośny.
Są prawie identyczne, ale bash
mają więcej funkcji - sh
jest (mniej więcej) starszym podzbiorem bash
.
sh
często oznacza oryginał Bourne shell
, który poprzedza bash
( Bourne *again* shell
) i został stworzony w 1977 roku. W praktyce jednak lepiej jest myśleć o nim jako o wysoce kompatybilnej krzyżowo powłoce zgodnej ze standardem POSIX z 1992 roku.
Skrypty, które zaczynają się #!/bin/sh
od sh
powłoki lub używają jej zwykle, robią to w celu zachowania kompatybilności wstecznej. Każdy system operacyjny unix / linux będzie miał sh
powłokę. Na Ubuntu sh
często wywołuje, dash
a na MacOS jest to specjalna wersja POSIX bash
. Powłoki te mogą być preferowane ze względu na zachowanie zgodne ze standardami, szybkość lub zgodność wsteczną.
bash
jest nowszy niż oryginał sh
, dodaje więcej funkcji i stara się być kompatybilny wstecz sh
. Teoretycznie sh
programy powinny się uruchamiać bash
. bash
jest dostępny na prawie wszystkich maszynach z linuksem / unixie i zwykle jest używany domyślnie - z wyjątkiem tego, że MacOS ma domyślną wersję zsh
Catalina (10.15). FreeBSD domyślnie nie jest bash
instalowany.
sh
daleko przed POSIX. W dzisiejszych czasach można mieć nadzieję, że sh
wszystko, co znajdziesz, jest co najmniej zgodne z POSIX; ale w starszych systemach nie jest to wcale dane. POSIX rozwija znacznie więcej niż powłokę; w rzeczywistości można argumentować, że standaryzacja wywołań systemu operacyjnego i funkcji bibliotecznych jest ważniejsza.
/bin/sh
może, ale nie musi, wywoływać ten sam program co /bin/bash
.
sh
obsługuje przynajmniej funkcje wymagane przez POSIX (przy założeniu poprawnej implementacji). Może także obsługiwać rozszerzenia.
bash
, „Bourne Again Shell”, implementuje funkcje wymagane dla sh oraz rozszerzeń specyficznych dla bash. Pełny zestaw rozszerzeń jest zbyt długi, aby go tu opisać, i różni się w zależności od nowych wydań. Różnice są udokumentowane w podręczniku bash. Wpisz info bash
i przeczytaj sekcję „Funkcje Bash” (sekcja 6 w aktualnej wersji) lub przeczytaj aktualną dokumentację online .
sh
daje tylko powłokę POSIX, jeśli masz odpowiednią PATH
konfigurację w bieżącej powłoce. Nie ma zdefiniowanej nazwy PATH, która daje powłokę POSIX.
sh
niekoniecznie nawet dawałem ci powłokę POSIX, na przykład w systemie Solaris.
bash i sh to dwie różne powłoki. Zasadniczo bash jest sh, z większą liczbą funkcji i lepszą składnią. Większość poleceń działa tak samo, ale są różne. Bash (bash) jest jedną z wielu dostępnych (ale najczęściej używanych) powłok uniksowych. Bash oznacza „Bourne Again SHell” i jest zamiennikiem / ulepszeniem oryginalnej powłoki Bourne'a (sh).
Skrypty powłoki to skrypty w dowolnej powłoce, podczas gdy skrypty Bash to skrypty specjalnie dla Bash. W praktyce jednak „skrypt powłoki” i „skrypt basha” są często używane zamiennie, chyba że dana powłoka nie jest Bash.
Powiedziawszy to, powinieneś zdać sobie sprawę, że / bin / sh na większości systemów będzie dowiązaniem symbolicznym i nie wywoła sh. W Ubuntu / bin / sh używane do łączenia z bash, typowe zachowanie w dystrybucjach Linuksa, ale teraz zmieniło się na linkowanie do innej powłoki o nazwie dash. Używałbym bash, ponieważ jest to w zasadzie standard (lub przynajmniej najczęstszy, z mojego doświadczenia). W rzeczywistości pojawiają się problemy, gdy skrypt bash użyje #! / Bin / sh, ponieważ twórca skryptów zakłada, że link ma bash, gdy nie musi.
Różnice są tak proste, jak to tylko możliwe: po zrozumieniu podstaw, inne komentarze zamieszczone powyżej będą łatwiejsze do złapania.
Shell - „Shell” to program, który ułatwia interakcję między użytkownikiem a systemem operacyjnym (jądrem). Dostępnych jest wiele implementacji powłoki, takich jak sh, bash, csh, zsh ... itp.
Za pomocą dowolnego programu Shell będziemy mogli wykonywać polecenia obsługiwane przez ten program powłoki.
Bash - To pochodzi od B ourne- a zysk Sh Ell. Za pomocą tego programu będziemy mogli wykonywać wszystkie polecenia określone przez Shell. Ponadto będziemy mogli wykonywać niektóre polecenia specjalnie dodane do tego programu. Bash ma kompatybilność wsteczną z sh.
Sh - Pochodzi z Bourne Sh ell. „sh” obsługuje wszystkie polecenia określone w powłoce. Oznacza to, że za pomocą tego programu będziemy mogli wykonywać wszystkie polecenia określone przez Shell.
Aby uzyskać więcej informacji, wykonaj: - https://man.cx/sh - https://man.cx/bash
System operacyjny Linux oferuje różne rodzaje powłok. Chociaż powłoki mają wiele wspólnych poleceń, każdy typ ma unikalne cechy. Przyjrzyjmy się różnego rodzaju najczęściej używanym pociskom.
Powłoka Sh:
Sh shell jest również znany jako Bourne Shell. Sh shell jest pierwszą powłoką opracowaną dla komputerów z systemem Unix przez Stephena Bourne'a w AT & T's Bell Labs w 1977 roku. Zawiera wiele narzędzi skryptowych.
Powłoka Bash:
Bash shell oznacza Bourne Again Shell. Powłoka Bash jest domyślną powłoką w większości dystrybucji Linuksa i zastępuje powłokę Sh Shell (powłoka Sh będzie również działać w powłoce Bash). Bash Shell może wykonywać większość skryptów powłoki Sh bez modyfikacji i zapewnia również funkcję edycji wiersza poleceń.