Articles

Bash (Unix shell)

syntaxe příkazu Bash je nadmnožina syntaxe příkazu Bourne shell. Bash podporuje rozšíření ortézy, dokončení příkazového řádku (Programovatelné dokončení), základní ladění a zpracování signálu (pomocí trap) od bash 2.05 a mimo jiné funkce. Bash může provést drtivá většina Bourne shell skripty bez úprav, s výjimkou Bourne shell skripty úrazu do okrajové syntaxe chování vykládat odlišně v Bash nebo se pokouší spustit systém velení odpovídající novější Bash builtin, atd. Bash syntaxe příkazu zahrnuje nápady čerpány z KornShell (ksh) a C shell (csh), jako příkazový řádek pro úpravy, historii příkazů (history příkaz), directory stack, $RANDOM$PPID proměnných, a POSIX příkazu syntaxe substituce $(…).

, Když uživatel stiskne klávesu tab v rámci interaktivní příkaz-shellu, Bash automaticky používá příkazového řádku dokončení, protože beta verze 2.04, aby odpovídaly částečně napsaný program, jména, názvy souborů a názvy proměnných. Bash příkaz-line dokončení systému je velmi flexibilní a přizpůsobitelné, a je často dodáván s funkcemi, které úplné argumenty a názvy souborů pro konkrétní programy a úkoly.

bashova syntaxe má v Bourne shellu mnoho rozšíření. Bash může provádět celočíselné výpočty („aritmetické vyhodnocení“) bez tření externích procesů. Používá pro tento účel příkaz ((…)) a syntaxi proměnné $((…)). Jeho syntaxe zjednodušuje i / O přesměrování. Například může přesměrovat standardní výstup (stdout) a standardní chybu (stderr) současně pomocí operátoru &>. Tento typ je jednodušší než ekvivalent Bourne shellu ‚command > file 2>&1‚. Bash podporuje proces nahrazování pomocí <(command)>(command)syntaxe, který nahrazuje výstupní (nebo vstupní) příkaz, kde je název souboru se obvykle používá. (Toto je realizováno prostřednictvím/proc/ fd / unnamed pipes na systémech, které to podporují, nebo v případě potřeby prostřednictvím dočasných pojmenovaných trubek).

Při použití funkce klíčové slovo, Bash function prohlášení nejsou kompatibilní s Bourne/Korn/POSIX skripty (KornShell má stejný problém při použití „funkcí“), ale Bash akceptuje stejné funkce syntaxe deklarací jako Bourne a Korn skořápky, a je POSIX-splňovala podmínky shody. Protože tyto a další rozdíly, Bash shell skripty jsou jen zřídka runnable pod Bourne nebo Korn shell tlumočníků, pokud záměrně psáno s kompatibilitou na mysli, což je stále méně časté, jak Linux více rozšíří. Ale v režimu POSIX, Bash odpovídá POSIX těsněji.

Bash zde podporuje dokumenty. Od verze 2.05 b Bash může přesměrovat standardní vstup (stdin) z „zde řetězce“ pomocí <<< operátor.

Bash 3.0 podporuje párování regulárních výrazů v procesu pomocí syntaxe připomínající Perl.

v únoru 2009 Bash 4.0 představil podporu pro asociativní pole. Asociativní indexy pole jsou řetězce, podobným způsobem jako AWK nebo Tcl. Mohou být použity k emulaci vícerozměrných polí. Bash 4 také přepne svou licenci na GPLv3; někteří uživatelé mají podezření, že tato změna licence je důvodem, proč MacOS nadále používá starší verze. Apple konečně přestal používat Bash ve svých operačních systémech s vydáním MacOS Catalina v roce 2019.

Brace expansionEdit

Brace expansionedit, také nazývaná alternace, je funkce zkopírovaná z C shellu. Vytváří sadu alternativních kombinací. Generované výsledky nemusí existovat jako soubory. Výsledky každého rozšířeného řetězce nejsou seřazeny a pořadí zleva doprava je zachováno:

$ 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živatelé by neměli používat ortézu expanze v shellové skripty, protože Bourne shell nevytvoří stejný výstup.

$ # 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

když je rozšíření brace kombinováno s zástupnými znaky, jsou závorky nejprve rozšířeny a výsledné zástupné znaky jsou normálně nahrazeny. Výpis obrázků JPEG a PNG v aktuálním adresáři lze tedy získat 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.

kromě střídání lze rozšíření brace použít pro sekvenční rozsahy mezi dvěma celými čísly nebo znaky oddělenými dvojitými tečkami. Novější verze Bash umožňují třetímu celému číslu určit přírůstek.

$ 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

Když brace expansion je v kombinaci s variabilní rozšíření proměnné expanze se provádí po ortéza expanze, která v některých případech může vyžadovat použití eval vestavěné, tak:

$ 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

Spuštění scriptsEdit

Tento oddíl obsahuje pokyny, rady, nebo jak na obsah. Účelem Wikipedie je prezentovat fakta, ne trénovat. Pomozte prosím vylepšit tento článek buď přepsáním obsahu návodu,nebo jeho přesunutím na Wikiversity, Wikibooks nebo Wikivoyage. (Leden 2019)

při spuštění Bash provede příkazy v různých souborech dot. Na rozdíl od skriptů Bash shell, soubory dot obvykle nemají povoleno oprávnění execute ani direktivu interpretu, jako je #!/bin/bash.

Legacy-kompatibilní Bash spuštění exampleEdit

kostra ~/.bash_profile níže je kompatibilní s Bourne shell a dává sémantika podobné jako csh, ~/.bashrc~/.bash_login && cmd je zkrat vyhodnocení, které testuje, zda název souboru existuje a je čitelný, přeskočí část za && pokud není.

 && . ~/.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

problémy Operačního systému v Bashi startupEdit

Některé verze systému Unix a Linux obsahují Bash systém spouštěcí skripty, obecně pod /etc adresáře. Bash je nazývá jako součást své standardní inicializace,ale jiné spouštěcí soubory je mohou číst v jiném pořadí, než je zdokumentovaná spouštěcí sekvence Bash. Výchozí obsah souborů uživatele root může mít také problémy, stejně jako soubory kostry, které systém poskytuje novým uživatelským účtům při instalaci. Spouštěcí skripty, které spustit X window systém může také udělat překvapivé věci s uživatelem Bash spouštěcí skripty ve snaze nastavit uživatele-proměnné prostředí před spuštění správce oken. Tyto otázky mohou být často řešeny pomocí ~/.xsession nebo ~/.xprofile soubor ~/.profile — který poskytuje proměnné prostředí Bash shell windows plodil z okna správce potřebovat, jako je xterm nebo Gnome Terminálu.

PortabilityEdit

Vyvolání Bash s --posix možnost nebo uvedením set -o posix ve skriptu způsobí, Bash, aby odpovídaly velmi úzce POSIX 1003.2 standard. Bash shell skripty určené pro přenositelnost by měly brát v úvahu alespoň standard POSIX shell. Některé funkce bash nenalezené v POSIXu jsou:

  • Některé rozšířené možnosti vyvolání
  • Připravte expanze
  • Pole a asociativní pole
  • dvojitý držák ] rozšířený test construct a jeho regex matching
  • dvojité závorky, aritmetické-hodnocení konstrukci (pouze (( ... )) ; $ ((... )) je POSIX)
  • Některé řetězce-manipulační operace v parametru expanze
  • místní pro scoped proměnné
  • Proces substituce
  • Bash-specifické builtins
  • Coprocesses
  • $EPOCHSECONDS a $EPOCHREALTIME proměnné

Pokud kus kódu používá takové funkce, to je nazýváno „bashism“ – problém pro přenosné použití. Debian je checkbashisms a Vidar Holen shellcheck může být použita, aby se ujistil, že skript neobsahuje tyto díly. Seznam se liší v závislosti na aktuální cíl shell: Debian politika umožňuje některé rozšíření v jejich skripty (tak, jak jsou v dash), zatímco skript, který má v úmyslu na podporu pre-POSIX Bourne shellů, jako autoconf je configure, jsou ještě více omezené funkce, které lze použít.

Klávesové zkratkyeditovat

Hlavní článek: GNU Readline

Bash používá readline k poskytování klávesových zkratek pro editaci příkazového řádku pomocí výchozích vazeb kláves (Emacs). Vi-vazby lze povolit spuštěním set -o vi.

Process managementEdit

Bash shell má dva režimy provádění příkazů: dávkový a souběžný režim.v pořadí) musí být odděleny znakem“; „nebo na samostatných řádcích:

command1; command2

v tomto příkladu je po dokončení command1 spuštěn command2.

pozadí provedení command1 může dojít při použití (symbol &) na konci provedení příkazu, a proces bude proveden v pozadí vrací okamžitě řízení shell a umožnění pokračování provádění příkazů.

command1 &

Nebo současné provedení dvou command1 a command2, musí být provedeny v Bash shellu následujícím způsobem:

command1 & command2

V tomto případě příkaz1 je proveden v pozadí & symbol, vrací okamžitě řízení shell, která provede příkaz2 v popředí.

proces může být zastaven a řízení vrátil k bash zadáním Ctrl+z, zatímco proces běží v popředí.

seznam všech procesů, a to jak v pozadí a zastavil, může být dosaženo tím, běží jobs:

$ jobs- Running command1 &+ Stopped command2

Ve výstupu, číslo v závorce odkazuje na id úlohy. Znaménko plus znamená výchozí Proces pro bg a fg. Text “ běh “ a „zastaven“ odkazují na stav procesu. Poslední řetězec je příkaz, který proces zahájil.

stav procesu lze změnit pomocí různých příkazů. fg příkaz přináší proces do popředí, zatímco bg nastaví zastavil proces běžící na pozadí. bgfg můžete vzít job id jako svůj první argument, zadat proces jednat. Bez jednoho používají výchozí proces, identifikovaný znaménkem plus na výstupu jobs. Příkaz kill lze použít k předčasnému ukončení procesu zasláním signálu. Id práce musí být uvedeno za znak procenta:

kill %1

Podmíněné executionEdit

Bash zásoby „podmíněné provedení“ velitelské oddělovače, že se provedení příkazu závisí na výstupní kód nastavuje precedens příkaz. Například:

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

kde./do_something se provádí pouze v případě, že příkaz cd (change directory) byl „úspěšný“ (vrátil Stav ukončení nula) a příkaz echo by byl proveden pouze v případě, že cd nebo .příkaz / do_something vrátí „chybu“ (nenulový Stav ukončení).

pro všechny příkazy je stav ukončení uložen ve speciální proměnné $?. Bash také podporuje if ...;pak ...;jinde ...;fi a case $ VARIABLE in $pattern)...;; $other_pattern)...;; esac formy podmíněného vyhodnocení příkazu.

hlášení Chybedit

“ bashbug “ přesměruje zde. Pro široce hlášenou chybu v září 2014 nalezenou v Bash, viz Shellshock (softwarová chyba).

externí příkaz s názvem bashbug hlásí Bash shell chyby. Když je příkaz vyvolán, vyvolá výchozí editor uživatele s vyplněným formulářem. Formulář je zaslán správcům Bash (nebo volitelně na jiné e-mailové adresy).

Programovatelné completionEdit

Bash programmable completion, completecompgen příkazy jsou k dispozici od verze beta 2.04 v roce 2000. Tato zařízení umožňují komplexní inteligentní dokončení, jako nabízí pro kartu-dokončit dostupné možnosti programu, a pak, poté, co uživatel vybere možnost, která vyžaduje názvem jako svůj příští vstup, pouze automatické dokončení cest souborů (a další možnosti) pro další token.