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.
Co definiuje myślnik jako domyślną powłokę skryptową?
wjandrea,
1
@wjandrea Fakt, że /bin/shjest dowiązaniem symbolicznym, /bin/dashtworzy 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/shgo 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/shpowłokę rodziny Bourne zgodną z POSIX.
Sergiy Kolodyazhnyy
29
Wprowadzenie
Skrypty powłoki i Bashskrypty nie są tym samym, ponieważ istnieją inne powłoki, takie jak shte, których można użyć do wykonania skryptu; skrypt przeznaczony do wykonania Bashpowinien być oznaczony jako Bashskrypt. Terminy są często używane zamiennie, ponieważ Bashdzięki swojej rozszerzonej funkcjonalności w porównaniu do tych shjest 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 shi bashjest 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
Shbyła oryginalną powłoką uniksową opracowaną przez Stephena Bourne'a; jednak systemy oparte na Debianie i Ubuntu traktują je dashjako swoją shpowłokę ( shjest 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 . Bashoznacza Bourne Again SHell i został opracowany później przez Briana Foxa i znacznie rozszerzył oryginał sh. Rozwój Foxa i innych Bashbył 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 shi Bashużywane w Ubuntu i innych dystrybucjach, są POSIXzgodne, 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 POSIXparametró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 bashskrypty i znajdują się #!/bin/bashna 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/shczy /bin/bash. Skrypty powłoki mogą być również nazywane w linii poleceń z albo shalbo 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 bashkomendy będą pracować sh, podczas gdy większość shpoleceń działa w bash. Ogólnie rzecz biorąc, większość użytkowników będzie chciała używać /bin/bashich skryptów, aby mogli skorzystać z rozszerzonego zestawu funkcji; skrypty systemowe można wykonać, /bin/shjeś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 Bashpublikacjach O'Reilly. Dobre wprowadzenie podejmuje również Przewodnik dla początkujących Bash .
Ta odpowiedź jest w rzeczywistości lepsza od mojej (odpowiedź zaakceptowana), moja właśnie przyszła na tydzień przed tym.
Hilton Shumway,
4
Istnieje wiele muszle dostępne dla Ubuntu, jak bash, zsh, ksh, tcshi 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 bashskryptach, używa powłoki, ale kiedy ktoś mówi o skryptach powłoki, nie używa per se bash. Ale jak bashto 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 4Mar2911:53/bin/sh -> dash*
$ ls -l /bin/dash
-rwxr-xr-x 1 root root 109768Mar2911:53/bin/dash*
$ ls -l /bin/bash
-rwxr-xr-x 1 root root 955024Apr308: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”.
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/shshebang), 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
Specyfikator Shebang i jednolite ścieżki do plików wykonywalnych powłoki w systemach operacyjnych typu Unix
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.
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.
Jeśli polecenie lub opcja nie jest zdefiniowana przez POSIX, to nie umieszczaj jej w
#! /bin/shskrypcie.
Konwertuj skrypt lub sprawdź błędy
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:
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.
źródło
/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 jaksh
te, których można użyć do wykonania skryptu; skrypt przeznaczony do wykonaniaBash
powinien być oznaczony jakoBash
skrypt. Terminy są często używane zamiennie, ponieważBash
dzięki swojej rozszerzonej funkcjonalności w porównaniu do tychsh
jest najczęściej używane do wykonywania skryptów użytkownika w wielu dystrybucjach. Jednak istnieją inne takie jak muszleKorn (ksh)
,C shell (csh)
aZ shell (zsh)
, ale nie będziemy się do nich tutaj jako dyskusjish
ibash
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ą jedash
jako swojąsh
powłokę (sh
jest faktycznie dowiązane symboliczniedash
). 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 innychBash
był ważną częścią projektu GNU. Więcej informacji można znaleźć w tej wspaniałej dyskusji na temat historiiBash
.Ważne jest, aby pamiętać, że zarówno, jak
sh
iBash
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 tychPOSIX
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 jakobash
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 albosh
albobash
.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 wbash
. 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 naBash
publikacjach O'Reilly. Dobre wprowadzenie podejmuje również Przewodnik dla początkujących Bash .źródło
Istnieje wiele muszle dostępne dla Ubuntu, jak
bash
,zsh
,ksh
,tcsh
icsh
.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 sebash
. Ale jakbash
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.źródło
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:
źródło
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
Specyfikator Shebang i jednolite ścieżki do plików wykonywalnych powłoki w systemach operacyjnych typu Unix
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 nabin/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-bashDebian / 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
Ogólną zasadą byłoby:
Konwertuj skrypt lub sprawdź błędy
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:
https://www.shellcheck.net/
http://mywiki.wooledge.org/Bashism
źródło