Articles

Bash (powłoka Uniksowa)

składnia polecenia Bash jest nadrzędnym składnią polecenia powłoki Bourne ’ a. Bash obsługuje Rozszerzanie nawiasów klamrowych, uzupełnianie wiersza poleceń (Programowalne uzupełnianie), podstawowe debugowanie i obsługę sygnałów (używając trap) od bash 2.05 a między innymi. Bash może wykonywać zdecydowaną większość skryptów powłoki Bourne 'a bez modyfikacji, z wyjątkiem skryptów powłoki Bourne’ a potykających się o zachowanie składni fringe interpretowane inaczej w Bash lub próbujących uruchomić polecenie systemowe pasujące do nowszego wbudowanego Basha itp. Składnia polecenia Bash zawiera pomysły zaczerpnięte z KornShell (ksh) i powłoki C (csh), takie jak edycja wiersza poleceń, historia poleceń (history), stos katalogów, $RANDOM I $PPID oraz składnia zastępowania poleceń POSIX $(…).

gdy użytkownik naciśnie klawisz tab w interaktywnej powłoce poleceń, Bash automatycznie używa uzupełniania wiersza poleceń, od wersji beta 2.04, aby dopasować częściowo wpisane nazwy programów, nazwy plików i nazwy zmiennych. System uzupełniania wiersza poleceń Bash jest bardzo elastyczny i konfigurowalny i często jest pakowany z funkcjami, które uzupełniają argumenty i nazwy plików dla określonych programów i zadań.

składnia Basha ma wiele rozszerzeń, których brakuje w powłoce Bourne ’ a. Bash może wykonywać obliczenia całkowite („arytmetyczna ocena”) bez wywoływania zewnętrznych procesów. Używa do tego celu polecenia((…)) oraz składni zmiennej$((…)). Jego składnia upraszcza przekierowanie We / Wy. Na przykład może przekierować standardowe wyjście (stdout) i standardowy błąd (stderr) w tym samym czasie za pomocą operatora &>. Jest to prostsze do wpisania niż odpowiednik powłoki Bourne ’ a ’command > file 2>&1’. Bash obsługuje zastępowanie procesów za pomocą<(command) I>(command)składni, która zastępuje wyjście (lub wejście) polecenia, w którym zwykle używana jest nazwa pliku. (Jest to realizowane przez rury/proc/ fd / unnamed w systemach, które je obsługują, lub przez tymczasowe rury nazwane, jeśli to konieczne).

podczas używania słowa kluczowego 'function’, deklaracje funkcji Bash nie są kompatybilne ze skryptami Bourne/Korn/POSIX (KornShell ma ten sam problem podczas używania 'function’), ale Bash akceptuje taką samą składnię deklaracji funkcji jak powłoki Bourne ’ a i Korna i jest zgodny z POSIX. Z powodu tych i innych różnic, skrypty powłoki Bash rzadko są uruchamiane pod interpreterami powłoki Bourne ’ a lub Korna, chyba że celowo zostały napisane z myślą o tej kompatybilności, co staje się coraz mniej powszechne w miarę jak Linux staje się bardziej rozpowszechniony. Ale w trybie POSIX, Bash jest bardziej zgodny z POSIX.

Bash obsługuje tutaj dokumenty. Od wersji 2.05 B Bash może przekierowywać standardowe wejście (stdin) z” Here string”używając operatora <<<.

Bash 3.0 obsługuje procesowe dopasowywanie wyrażeń regularnych przy użyciu składni przypominającej Perl.

w lutym 2009 r.Bash 4.0 wprowadził obsługę tablic asocjacyjnych. Indeksy tablicy asocjacyjnej są ciągami, w sposób podobny do AWK lub TCL. Mogą być używane do emulowania tablic wielowymiarowych. Bash 4 zmienia również licencję na GPLv3; niektórzy użytkownicy podejrzewają, że ta zmiana licencji jest powodem, dla którego MacOS nadal korzysta ze starszych wersji. Apple w końcu przestał używać Bash w swoich systemach operacyjnych wraz z wydaniem MacOS Catalina w 2019.

rozszerzenie Nawiasówedytuj

Rozszerzenie nawiasu, zwane również alternacją, jest funkcją skopiowaną z powłoki C. Generuje zestaw alternatywnych kombinacji. Wygenerowane wyniki nie muszą istnieć jako pliki. Wyniki każdego rozwiniętego łańcucha nie są sortowane i zachowana jest kolejność od lewej do prawej:

$ echo a{p,c,d,b}eape ace ade abe$ echo {a,b,c}{d,e,f}ad ae af bd be bf cd ce cf

użytkownicy nie powinni używać rozszerzeń brace w przenośnych skryptach powłoki, ponieważ powłoka Bourne ’ a nie wytwarza tego samego wyjścia.

$ # A traditional shell does not produce the same output$ /bin/sh -c 'echo a{p,c,d,b}e'a{p,c,d,b}e

gdy Rozszerzanie nawiasów klamrowych jest połączone z symbolami wieloznacznymi, nawiasy klamrowe są najpierw rozszerzane, a następnie wynikowe symbole wieloznaczne są normalnie zastępowane. W związku z tym listę obrazów JPEG i PNG w bieżącym katalogu można uzyskać za pomocą:

ls *.{jpg,jpeg,png} # expands to *.jpg *.jpeg *.png - after which, # the wildcards are processedecho *.{png,jp{e,}g} # echo just show the expansions - # and braces in braces are possible.

oprócz przemienności można zastosować rozszerzenie nawiasów klamrowych dla zakresów sekwencyjnych między dwiema liczbami całkowitymi lub znakami oddzielonymi podwójnymi kropkami. Nowsze wersje Bash pozwalają trzeciej liczbie całkowitej określić przyrost.

$ echo {1..10}1 2 3 4 5 6 7 8 9 10$ echo file{1..4}.txtfile1.txt file2.txt file3.txt file4.txt$ echo {a..e}a b c d e$ echo {1..10..3}1 4 7 10$ echo {a..j..3}a d g j

gdy rozszerzenie nawiasu jest połączone z rozszerzeniem zmiennej, rozszerzenie zmiennej jest wykonywane po rozszerzeniu nawiasu, co w niektórych przypadkach może wymagać zastosowania wbudowanegoeval, a zatem:

$ start=1; end=10$ echo {$start..$end} # fails to expand due to the evaluation order{1..10}$ eval echo {$start..$end} # variable expansion occurs then resulting string is evaluated1 2 3 4 5 6 7 8 9 10

Skrypty Startoweedit

Ta sekcja zawiera instrukcje, porady i instrukcje. Celem Wikipedii jest przedstawianie faktów, a nie szkolenie. Prosimy o pomoc w ulepszaniu tego artykułu poprzez przepisanie treści z instrukcjami lub przeniesienie go do Wikiwersytetu, Wikibooks lub Wikivoyage. (Styczeń 2019)

Kiedy Bash uruchamia się, wykonuje polecenia w różnych plikach kropek. W przeciwieństwie do skryptów powłoki Bash, pliki dot zazwyczaj nie mają włączonego uprawnienia do wykonywania ani dyrektywy interpretera ,takiej jak#!/bin/bash.

przykład uruchamiania Bash zgodnego z Legacy ’ Medit

szkielet~/.bash_profile poniżej jest kompatybilny z powłoką Bourne ’ a i nadaje semantykę podobną do csh dla~/.bashrc I~/.bash_login && cmd jest ewaluacją zwarciową, która sprawdza, czy nazwa pliku istnieje i jest czytelna, pomijając część po &&, jeśli tak nie jest.

 && . ~/.profile # set up environment, once, Bourne-sh syntax onlyif ; then # are we interactive? && . ~/.bashrc # tty/prompt/function setup for interactive shells && . ~/.bash_login # any at-login tasks for login shell onlyfi # End of "if" block

problemy z systemem operacyjnym w Bash startupEdit

niektóre wersje systemów Unix i Linux zawierają skrypty startowe systemu Bash, zwykle w katalogach/etc. Bash wywołuje je jako część standardowej inicjalizacji, ale inne pliki startowe mogą odczytać je w innej kolejności niż udokumentowana Sekwencja startowa Bash. Domyślna zawartość plików użytkownika root może również mieć problemy, jak również pliki szkieletu system dostarcza do nowych kont użytkowników po konfiguracji. Skrypty startowe uruchamiające System X window mogą również robić zaskakujące rzeczy ze skryptami startowymi Bash użytkownika, próbując skonfigurować zmienne środowiskowe użytkownika przed uruchomieniem menedżera okien. Problemy te często można rozwiązać za pomocą pliku ~/.xsession lub ~/.xprofile, aby odczytać plik ~/.profile — który dostarcza zmiennych środowiskowych, które okna powłoki Bash powstały z menedżera okien, takich jak Xterm lub Gnome Terminal.

Przenośnośćedit

wywołanie Basha z opcją --posixlub podanie set -o posix w skrypcie powoduje, że Bash jest bardzo zgodny ze standardem POSIX 1003.2. Skrypty powłoki Bash przeznaczone do przenoszenia powinny uwzględniać przynajmniej standard powłoki POSIX. Niektóre funkcje bash nie znaleziono w POSIX są:

  • niektóre rozszerzone opcje wywoływania
  • rozszerzenie nawiasów
  • tablice i tablice asocjacyjne
  • podwójny nawias] Rozszerzona konstrukcja testowa i jej dopasowanie regex
  • konstrukcja arytmetyczno-ewaluacyjna z podwójnymi nawiasami (tylko(( ... )) ;$(( ... ))
  • niektóre operacje manipulacji łańcuchami w rozszerzaniu parametrów
  • lokalnydla zmiennych zakresowych
  • zastępowanie procesów
  • builtins specyficzne dla Basha
  • Koprocesy
  • $EPOCHSECONDS i $EPOCHREALTIME zmienne

jeśli jakiś fragment kodu używa takiej funkcji, nazywa się to „bashism”-problem dla przenośnego użytku. Debian ’ s checkbashisms i Vidar Holen ’ s shellcheck mogą być użyte do upewnienia się, że skrypt nie zawiera tych części. Lista różni się w zależności od rzeczywistej powłoki docelowej: Polityka Debiana zezwala na niektóre rozszerzenia w swoich skryptach (tak jak w dash), podczas gdy skrypt zamierzający obsługiwać powłoki Bourne ’ a przed POSIXEM, takie jak configure, są jeszcze bardziej ograniczone w funkcjach, z których mogą korzystać.

skróty Klawiaturoweedit

artykuł główny: GNU Readline

Bash używa readline do udostępniania skrótów klawiaturowych do edycji wiersza poleceń przy użyciu domyślnych wiązań klawiszy (Emacs). VI-wiązania można włączyć uruchamiając set -o vi.

Zarządzanie Procesamiedit

powłoka Bash ma dwa tryby wykonywania poleceń: wsadowy i tryb współbieżny.

aby wykonać polecenia wsadowo (tzn. w kolejności) muszą być oddzielone znakiem”;”, lub w osobnych wierszach:

command1; command2

w tym przykładzie, po zakończeniu polecenia command1, wykonywane jest polecenie command2.

wykonanie polecenia w tle może nastąpić za pomocą (symbol &) na końcu polecenia wykonawczego, a proces będzie wykonywany w tle, zwracając natychmiast kontrolę do powłoki i umożliwiając dalsze wykonywanie poleceń.

command1 &

lub aby mieć jednoczesne wykonanie dwóch komend 1 i komend 2, muszą być wykonane w powłoce Bash w następujący sposób:

command1 & command2

w tym przypadku polecenie 1 jest wykonywane w tle& symbol, zwracając natychmiast kontrolę do powłoki wykonującej polecenie 2 Na Pierwszym Planie.

proces może być zatrzymany i kontrola zwrócona do bash przez wpisanie Ctrl+z, gdy proces jest uruchomiony na pierwszym planie.

listę wszystkich procesów, zarówno w tle, jak i zatrzymanych, można uzyskać, uruchamiającjobs:

$ jobs- Running command1 &+ Stopped command2

na wyjściu liczba w nawiasach odnosi się do ID zadania. Znak plus oznacza domyślny proces dla bg I fg. Tekst „uruchomiony ” i” zatrzymany ” odnoszą się do stanu procesu. Ostatni łańcuch jest poleceniem, które rozpoczęło proces.

stan procesu może być zmieniany za pomocą różnych poleceń. Poleceniefg przenosi proces na pierwszy plan, podczas gdybg ustawia zatrzymany proces działający w tle. bg I fg może przyjąć identyfikator zadania jako pierwszy argument, aby określić proces, który ma działać. Bez niego, używają domyślnego procesu, identyfikowanego przez znak plus na wyjściu jobs. Poleceniekill może być użyte do przedwczesnego zakończenia procesu poprzez wysłanie do niego sygnału. Identyfikator zadania musi być podany po znaku procent:

kill %1

warunkowe wykonywanieedit

Bash dostarcza separatory poleceń „warunkowe wykonanie”, które uzależniają wykonanie polecenia od kodu wyjścia ustawionego przez polecenie precedensowe. Na przykład:

cd "$SOMEWHERE" && ./do_something || echo "An error occurred" >&2

gdzie ./do_something jest wykonywane tylko wtedy, gdy polecenie cd (change directory) było „pomyślne” (zwracało status wyjścia równy zero), a polecenie echo byłoby wykonywane tylko wtedy, gdy cd lub ./ do_something polecenie zwraca „błąd” (niezerowy status wyjścia).

dla wszystkich poleceń status zakończenia jest zapisywany w zmiennej specjalnej $?. Bash obsługuje równieżif ...; wtedy ...; else ...; fi I case $zmienna w $wzorze)...;; $other_pattern)...;; esac formy warunkowej oceny komend.

zgłaszanie Błędówedit

„bashbug” przekierowuje tutaj. Aby zapoznać się z szeroko zgłaszanym błędem z września 2014 r.znalezionym w Bash, zobacz Shellshock (Software bug).

zewnętrzne polecenie o nazwie bashbug zgłasza błędy powłoki Bash. Gdy polecenie jest wywoływane, wyświetla domyślny edytor użytkownika z formularzem do wypełnienia. Formularz jest wysyłany do opiekunów Bash (lub opcjonalnie na inne adresy e-mail).

programowalne uzupełnianieedit

programowalne uzupełnianie Bash,complete Icompgen polecenia są dostępne od wersji beta 2.04 w 2000 roku. Funkcje te umożliwiają złożone inteligentne uzupełnianie, takie jak oferowanie opcji tab-complete dostępnych programów, a następnie, po wybraniu przez użytkownika opcji, która wymaga nazwy pliku jako następnego wejścia, tylko Automatyczne uzupełnianie ścieżek plików (a nie innych opcji) dla następnego tokena.