Odpowiedzi:
Bash ( bash
) jest jedną z wielu dostępnych (ale najczęściej używanych) powłok uniksowych. Bash to skrót od „ B ourne A gain SH ell” 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.
EDYCJA: W rzeczywistości domyślną powłoką skryptową w Ubuntu jest dash, natomiast domyślną powłoką interaktywną (otrzymywaną po podłączeniu terminalu) jest Bash. Niemniej jednak te dwa terminy są nadal w większości zamienne.
/bin/sh
jest dowiązaniem symbolicznym, /bin/dash
tworzy domyślną powłokę systemową , ale nie jest to domyślna powłoka skryptowa , tzn. nie ma pisemnej reguły, której absolutnie musisz użyć /bin/sh
. Kiedy się /bin/sh
go używa, jest to przede wszystkim ze względu na przenośność, gdy oczekuje się, że skrypt będzie używany na wielu platformach systemu operacyjnego typu Unix, z których większość ma /bin/sh
powłokę rodziny Bourne zgodną z POSIX.
Wprowadzenie
Skrypty powłoki i Bash
skrypty nie są tym samym, ponieważ istnieją inne powłoki, takie jak sh
te, których można użyć do wykonania skryptu; skrypt przeznaczony do wykonania Bash
powinien być oznaczony jako Bash
skrypt. Terminy są często używane zamiennie, ponieważ Bash
dzięki swojej rozszerzonej funkcjonalności w porównaniu do tych sh
jest najczęściej używane do wykonywania skryptów użytkownika w wielu dystrybucjach. Jednak istnieją inne takie jak muszle Korn (ksh)
, C shell (csh)
a Z shell (zsh)
, ale nie będziemy się do nich tutaj jako dyskusji sh
i bash
jest najbardziej istotne dla Ubuntu. Świetny artykuł IBM o tym szczegółowo opisuje ewolucję powłok w Linuksie i dobrze opisuje architekturę powłok oraz różnice między nimi.
Skrypty powłoki
Sh
była oryginalną powłoką uniksową opracowaną przez Stephena Bourne'a; jednak systemy oparte na Debianie i Ubuntu traktują je dash
jako swoją sh
powłokę ( sh
jest faktycznie dowiązane symbolicznie dash
). W Debianie i Ubuntu, ze względu na szybkość sh
, jest częściej używany do krytycznych procedur systemowych i wykonywania skryptów kluczowych podczas uruchamiania; po więcej szczegółów zobacz wiki Ubuntu . Bash
oznacza Bourne Again SHell i został opracowany później przez Briana Foxa i znacznie rozszerzył oryginał sh
. Rozwój Foxa i innych Bash
był ważną częścią projektu GNU. Więcej informacji można znaleźć w tej wspaniałej dyskusji na temat historii Bash
.
Ważne jest, aby pamiętać, że zarówno, jak sh
i Bash
używane w Ubuntu i innych dystrybucjach, są POSIX
zgodne, co oznacza, że subskrybują szereg standardów dotyczących wykonywania poleceń w Powłoce. Ma to na celu zapewnienie, że wyniki skryptów używanych w systemie operacyjnym można wiarygodnie przewidzieć, a zachowanie powłoki może być utrzymywane w ramach tych POSIX
parametrów, ponieważ jest to szczególnie ważne dla programistów. Więcej informacji na temat standardów znajduje się w oficjalnej dokumentacji .
Często skrypty powłoki mają sufiks .sh
, nawet jeśli są przeznaczone do wykonywania jako bash
skrypty i znajdują się #!/bin/bash
na górze skryptu. W rzeczywistości nie ma znaczenia, czy skrypt nazywa się script.sh czy my.script , liczy się to, czy wywołanie interpretera to /bin/sh
czy /bin/bash
. Skrypty powłoki mogą być również nazywane w linii poleceń z albo sh
albo bash
.
Jednakże, jest to ważne , aby pamiętać, że wyniki mogą być różne w zależności od interpreter nazywany jest, jak nie wszystkie bash
komendy będą pracować sh
, podczas gdy większość sh
poleceń działa w bash
. Ogólnie rzecz biorąc, większość użytkowników będzie chciała używać /bin/bash
ich skryptów, aby mogli skorzystać z rozszerzonego zestawu funkcji; skrypty systemowe można wykonać, /bin/sh
jeśli jest to wymagane.
Zasoby do tworzenia skryptów Bash Shell
Czasami trudno jest znaleźć przydatne zasoby online, które są zgodne z dobrą praktyką i dają porady, które pozwolą ci stworzyć przydatne skrypty. Po tym man bash
, niektóre z najważniejszych zasobów to wiki Grega , hakerzy Bash i ostatnia książka Steve'a Parkera na temat skryptów Shell, która koncentruje się głównie na Bash
publikacjach O'Reilly. Dobre wprowadzenie podejmuje również Przewodnik dla początkujących Bash .
Istnieje wiele muszle dostępne dla Ubuntu, jak bash
, zsh
, ksh
, tcsh
i csh
.
Więc za każdym razem, gdy ktoś mówi „ muszla” , mówi o jednym z nich. Jednak te muszle różnią się nieco od siebie. Tak więc, gdy ktoś mówi o bash
skryptach, używa powłoki, ale kiedy ktoś mówi o skryptach powłoki, nie używa per se bash
. Ale jak bash
to jest zwykle używane w skryptach dla Ubuntu, zwykle tak jest. Co więcej, różne powłoki są takie same pod wieloma względami, więc zwykle nie ma to znaczenia.
$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Mar 29 11:53 /bin/sh -> dash*
$ ls -l /bin/dash
-rwxr-xr-x 1 root root 109768 Mar 29 11:53 /bin/dash*
$ ls -l /bin/bash
-rwxr-xr-x 1 root root 955024 Apr 3 08:58 /bin/bash*
To pokazuje, że „sh” jest dowiązaniem symbolicznym do „dash”, a / bin / bash, która jest domyślną powłoką interaktywną w Ubuntu, jest plikiem wykonywalnym, który jest prawie 9 razy większy niż / bin / sh.
Rzeczywiście, „man sh” (1590 linii) vs „man bash” (5459 linii) pokazuje, że bash jest dużym nadzbiorem tradycyjnego „sh”.
Przeczytaj więcej tutaj:
Skrypt powłoki zostałby zdefiniowany jako skrypt zorientowany na przenośność, który może być uruchamiany przez powłokę systemową systemów operacyjnych zgodnych z POSIX. Składnia byłaby identyczna lub podobna do składni języka skryptowego powłoki zdefiniowanej przez standard POSIX. Jest to standard dla większości systemów operacyjnych zgodnych z POSIX, takich jak Linux / Unix / * BSD itp. POSIX jest najczęstszą podstawą kompatybilności w różnych systemach operacyjnych.
Różne systemy operacyjne od wyżej wspomnianych implementują różne powłoki do nieinteraktywnego użytku (tj. Do wykonywania skryptów systemowych lub skryptów używających #! /bin/sh
shebang), które oprócz implementacji poleceń i składni POSIX mają własne rozszerzenia lub mogą zostać pozbawione mniej użytecznych funkcji ze względów wydajnościowych, ale podstawa POSIX pozwala na bardzo wysoki poziom przenośności skryptów zaprojektowanych dla różnych systemów operacyjnych zgodnych z POSIX.
Większość wyżej wymienionych systemów operacyjnych ma oddzielną interaktywną powłokę, która jest zwykle w pełni funkcjonalnym bash . Bash jest w dużej mierze zgodny z POSIX, ale ma też dużą pulę dodatkowych poleceń i obsługuje inną składnię. Uruchomienie Bash z opcją wiersza polecenia --posix lub wykonanie „set -o posix” podczas działania Bash spowoduje, że Bash będzie bardziej zgodny ze standardem POSIX, zmieniając zachowanie tak, aby było zgodne z tym określonym przez POSIX w obszarach, w których domyślna jest Bash różni się, patrz: https://www.gnu.org/software/bash/manual/html_node/Bash-POSIX-Mode.html
Dzięki jednolitym regułom umieszczania plików wykonywalnych dla powłok (zwykle znajdują się one w katalogu „/ bin /”), możemy mieć jednolite reguły tworzenia skryptów powłoki, a dokładniej, jesteśmy pewni, jaką ścieżkę umieścić w wyrażeniu shebang, aby wskazywać na odpowiedni plik wykonywalny powłoki do uruchomienia skryptu. Systemy plików Unix / Linux / * BSD nie obsługują rozszerzeń wewnętrznie, więc rozszerzenia plików służą jedynie jako dodatkowa wskazówka lub do celów indeksowania.
W szczególności na Debianie / Ubuntu bin/sh
znajduje się dowiązanie symboliczne wskazujące na bin/dash
plik wykonywalny powłoki dash . To sprawia, że dash jest powłoką systemową, która, jak się szacuje, jest 4x szybsza i ma rozmiar o 1/10 większy niż bardziej funkcjonalny bash. źródło: https://unix.stackexchange.com/questions/148035/is-dash-or-some-other-shell-faster-than-bash
Debian / Ubuntu interaktywny terminal jest domyślnie, jak w wielu innych uniksowych systemach operacyjnych, bash, dla których droga jest również jednolity: /bin/bash
.
Standard POSIX.1-2017: http://pubs.opengroup.org/onlinepubs/9699919799/xrat/V4_xcu_chap02.html
Jeśli polecenie lub opcja nie jest zdefiniowana przez POSIX, to nie umieszczaj jej w
#! /bin/sh
skrypcie.
Aby przekonwertować skrypt z bash na POSIX, możesz chcieć automatycznie sprawdzić błędy w skrypcie powłoki lub zobaczyć, jakie zmiany w skrypcie bash powinieneś wprowadzić, aby był zgodny z POSIX: