Articles

Bash (Unix shell)

a Bash parancs szintaxisa a Bourne shell parancs szintaxisának szuperkészlete. Bash támogatja zárójel bővítése, parancssori befejezése (programozható befejezése), alapvető hibakeresés és jelkezelés (a trap) mivel bash 2.05 a többek között. Bash tudja végrehajtani a túlnyomó többsége a Bourne shell scriptek módosítás nélkül, kivéve a Bourne shell scriptek botladozó a béren kívüli szintaktikai viselkedése eltérő értelmezés a Bash, vagy próbál futtatni egy rendszer parancsot megfelelő egy újabb Bash beépített, stb. A Bash parancs szintaxisa magában foglalja a Kornshellből (ksh) és a C héjból (csh) készített ötleteket, mint például a parancssori szerkesztés, A parancs története (history parancs), a könyvtár verem, a $RANDOM és $PPID változók, valamint a POSIX parancshelyettesítés $(…).

amikor egy felhasználó megnyomja a TAB billentyűt egy interaktív parancshéjon belül, a Bash automatikusan a parancssor befejezését használja, a 2.04-es béta verzió óta, hogy megfeleljen a részben beírt programneveknek, fájlneveknek és változó neveknek. A Bash parancssori befejezési rendszer nagyon rugalmas és testreszabható, és gyakran olyan funkciókkal van csomagolva, amelyek bizonyos programokhoz és feladatokhoz argumentumokat és fájlneveket tartalmaznak.

a Bash szintaxisának számos kiterjesztése hiányzik a Bourne héjból. Bash képes egész számításokat végezni (“aritmetikai értékelés”) külső folyamatok ívása nélkül. Erre a célra a ((…)) parancsot és a $((…)) változó szintaxist használja. Szintaxisa leegyszerűsíti az I / O átirányítást. Például átirányíthatja a standard kimenetet (stdout) és a standard hibát (stderr) egyidejűleg a &> operátorral. Ez egyszerűbb, mint a ” command > file 2>&1“. A Bash támogatja a folyamat helyettesítését a <(command) és >(command)szintaxis használatával, amely helyettesíti egy parancs kimenetét (vagy bemenetét), ahol a fájlnevet általában használják. (Ezt a /proc/fd/ meg nem nevezett csöveken keresztül hajtják végre olyan rendszereken, amelyek támogatják ezt, vagy szükség esetén ideiglenes elnevezett csöveken keresztül).

Ha használja a “funkció” kulcsszó, függvénytől nyilatkozatokat nem kompatibilis a Bourne/Korn/POSIX szkriptek (a KornShell ugyanaz a probléma, ha használja “funkció”), de Bash elfogadja az azonos függvény deklaráció szintaxisa, mint a Bourne pedig Korn kagyló, illetve a POSIX-megfelel. Ezek és más különbségek miatt a Bash shell szkriptek ritkán futtathatók a Bourne vagy a Korn shell tolmácsok alatt, kivéve, ha szándékosan ezt a kompatibilitást szem előtt tartva írták, ami egyre kevésbé gyakori, mivel a Linux elterjedtebbé válik. De POSIX módban a Bash jobban megfelel a POSIX-nek.

Bash támogatja itt dokumentumokat. Mivel version 2.05 Bash átirányíthatja szabványos bemenet (stdin) a “here string” a <<< operátor.

a Bash 3.0 támogatja a folyamatban lévő reguláris kifejezés illesztését a Perl-re emlékeztető szintaxis segítségével.

2009 februárjában a Bash 4.0 bevezette az asszociatív tömbök támogatását. Az asszociatív tömbindexek húrok, az AWK-hoz vagy a Tcl-hez hasonló módon. Ezek felhasználhatók többdimenziós tömbök emulálására. A bash 4 a licencét GPLv3-ra is átkapcsolja; egyes felhasználók azt gyanítják, hogy ez az engedélyezési változás az, amiért a MacOS továbbra is régebbi verziókat használ. Az Apple végül abbahagyta a Bash használatát operációs rendszereikben a MacOS Catalina 2019-es kiadásával.

Brace expansionEdit

A Brace expansion, más néven alternation, a C héjból másolt szolgáltatás. Ez generál egy sor alternatív kombinációk. A generált eredményeknek nem kell fájlokként létezniük. Az egyes kibővített karakterláncok eredményei nincsenek rendezve, a bal-jobb sorrend megmarad:

$ 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

a felhasználók nem használhatnak merevítő bővítményeket hordozható shell szkriptekben, mivel a Bourne héj nem ugyanazt a kimenetet állítja elő.

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

amikor a merevítő expanziót helyettesítő karakterekkel kombinálják, a zárójelek először kibővülnek, majd a kapott helyettesítő karaktereket normálisan helyettesítik. Így az aktuális könyvtárban JPEG és PNG képek listája érhető el:

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.

a váltakozás mellett a merevítő expanzió két egész vagy két ponttal elválasztott karakter közötti szekvenciális tartományokra is használható. A Bash újabb verziói lehetővé teszik egy harmadik egész szám megadását.

$ 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

amikor a merevítő expanziót változó expanzióval kombinálják, a változó expanziót a merevítő expanzió után hajtják végre, ami bizonyos esetekben szükségessé teheti a eval beépített, így:

$ 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

Startup scriptsEdit

ez a szakasz utasításokat, tanácsokat vagy hogyan kell tartalmat. A Wikipédia célja A tények bemutatása, nem pedig a vonat. Kérjük, segítsen javítani ezt a cikket akár átírásával a how-to tartalom, vagy áthelyezve azt Wikiversity, Wikibooks vagy Wikivoyage. (Január 2019)

amikor Bash elindul, végrehajtja a parancsokat a különböző dot fájlokat. A Bash shell szkriptekkel ellentétben a dot fájlok általában nem rendelkeznek végrehajtási engedéllyel, sem olyan értelmezői irányelvvel, mint például a #!/bin/bash.

Legacy-kompatibilis bash indítási exampleEdit

a csontváz~/.bash_profile kompatibilis a Bourne héjjal, és a ~/.bashrc és ~/.bash_loginszemantikákat ad. A && cmdegy rövidzárlat-értékelés, amely a fájlnév meglétét és olvashatóságát teszteli, kihagyva a részt a && után, ha nem.

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

operációs rendszer problémák bash startupEdit

egyes változatai Unix és Linux tartalmaznak Bash rendszerindító szkripteket, általában a /etc könyvtárak alatt. Bash ezeket a szabványos inicializálás részeként hívja fel, de más indítási fájlok más sorrendben olvashatják el őket, mint a dokumentált Bash indítási sorrend. A root felhasználó fájljainak alapértelmezett tartalma szintén problémákat okozhat, valamint a rendszer által az új felhasználói fiókokhoz biztosított csontvázfájlok a telepítés során. Az X window rendszert elindító indítási szkriptek meglepő dolgokat is tehetnek a felhasználó Bash indítási szkriptjeivel, hogy megpróbálják beállítani a felhasználói környezeti változókat az ablakkezelő elindítása előtt. Ezek a problémák gyakran a címzett segítségével egy ~/.xsession vagy ~/.xprofile fájlt, hogy olvassa el a ~/.profile—, amely biztosítja a környezeti változókat, hogy a Bash shell windows szült a window manager kell, mint például az xterm vagy a Gnome Terminál.

PortabilityEdit

hivatkozó Bash a --posix opció vagy amely set -o posix egy script okoz Bash, hogy megfeleljen nagyon szorosan a POSIX 1003.2 szabvány. A hordozhatóságra szánt Bash shell szkripteknek legalább a POSIX shell szabványt kell figyelembe venniük. Néhány Bash funkciók nem található POSIX vannak:

  • Bizonyos kiterjesztett invokáció az opciók
  • Zárójel terjeszkedés
  • a Tömbök az asszociatív tömbök
  • A kettős zárójel ] kiterjesztett vizsgálat konstrukció, valamint a regex megfelelő
  • A kettős zárójel számtani-értékelési építeni (csak (( ... )) ; $ ((... )) a POSIX)
  • Bizonyos string-manipuláció műveletekkel a paraméter terjeszkedés
  • helyi a távcsöves változók
  • a Folyamat helyettesítő
  • Bash-specifikus builtins
  • Coprocesses
  • $EPOCHSECONDS, illetve $EPOCHREALTIME változók

Ha a kód egy részét használja ezt a funkciót, az úgynevezett “bashism” – egy probléma hordozható használni. A Debian checkbashismsés Vidar Holen shellcheck használható annak biztosítására, hogy a szkript nem tartalmazza ezeket a részeket. A lista a tényleges célhéj függvényében változik: a Debian irányelvei lehetővé teszik bizonyos kiterjesztések használatát a szkriptjeikben (mint például a dash), míg a pre-POSIX Bourne héjakat támogatni kívánó szkript, mint például az autoconf configure, még korlátozottabbak az általuk használható funkciókban.

billentyűzet shortcutsEdit

fő cikk: GNU Readline

Bash a readline-t használja a parancssor szerkesztéséhez az alapértelmezett (Emacs) billentyűkombinációk használatával. A Vi-kötések a set -o vifuttatásával engedélyezhetők.

Process managementEdit

a Bash shell két végrehajtási mód parancsok: batch, egyidejű módban.

parancsok kötegelt (azaz sorrendben) végrehajtásához a”; “karakterrel vagy külön sorokkal kell elválasztani őket:

command1; command2

ebben a példában, amikor a command1 befejeződött, a command2 végrehajtásra kerül.

a command1 háttérvégrehajtása egy végrehajtási parancs végén (symbol &) történhet, és a folyamat a háttérben, azonnal visszatér a parancshéj vezérléséhez, és lehetővé teszi a parancsok folyamatos végrehajtását.

command1 &

vagy ahhoz, hogy két command1 és command2 egyidejű végrehajtása legyen, azokat a Bash héjában kell végrehajtani a következő módon:

command1 & command2

ebben az esetben a command1 a háttérben kerül végrehajtásra & szimbólum, amely azonnal visszaadja a vezérlést az előtérben a command2 parancsot végrehajtó héjnak.

egy folyamat leállítható, és a vezérlést a Ctrl+z billentyűkombinációval vissza lehet állítani, miközben a folyamat az előtérben fut.

az összes folyamat listája, mind a háttérben, mind a leállítva, ajobs:

$ jobs- Running command1 &+ Stopped command2

a kimeneten a zárójelben szereplő szám a job id-re utal. A plusz a bg ésfgalapértelmezett folyamatát jelenti. A “futás” és a “Leállítás” szöveg a folyamat állapotára utal. Az utolsó karakterlánc az a parancs, amely elindította a folyamatot.

a folyamat állapota különböző parancsokkal módosítható. A fgparancs egy folyamatot hoz az előtérbe, míg a bg beállítja a háttérben futó leállított folyamatot. bgés fg lehet, hogy egy job id, mint az első érv, hogy adja meg a folyamat cselekedni. Egy nélkül az alapértelmezett folyamatot használják, amelyet a jobskimenetében egy plusz jel azonosított. Akill parancs használható a folyamat idő előtti befejezésére, jel küldésével. A job id-t egy százalékos jel után kell megadni:

kill %1

feltételes végrehajtásszerkesztés

Bash “feltételes végrehajtás” parancsszeparátorokat szállít, amelyek egy parancs végrehajtását a precedens parancs által beállított kilépési kódtól függővé teszik. Például:

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

ahol./ do_something csak akkor kerül végrehajtásra, ha a cd (change directory) parancs “sikeres” volt (nulla kilépési állapotot adott vissza), és az echo parancs csak akkor hajtható végre, ha a cd vagy a ./ do_something parancs visszaad egy “hiba” (nem nulla kilépési állapot).

minden parancs esetében a kilépési állapot a $?speciális változóban van tárolva. Bash is támogatja if ...; akkor ...; más ...; fi és case $változó $mintában)...;; $other_pattern)...;; esac a feltételes parancsértékelés formái.

Hibajelentésszerkesztés

“bashbug” átirányítja itt. A széles körben jelentett szeptember 2014 bug található Bash, lásd Shellshock (software bug).

a bashbug nevű külső parancs Bash shell hibákat jelent. A parancs meghívásakor megjelenik a felhasználó alapértelmezett szerkesztője egy kitöltendő űrlappal. Az űrlapot elküldjük a Bash karbantartóknak (vagy opcionálisan más e-mail címekre).

programozható completionEdit

Bash programozható Befejezés, complete és compgen a 2-es béta verzió óta rendelkezésre állnak parancsok.2000-ben 04. Ezek a lehetőségek lehetővé teszik a komplex intelligens befejezést, például a rendelkezésre álló programbeállítások tab-kitöltését, majd miután a felhasználó kiválaszt egy olyan opciót, amely a következő bemenetként fájlnevet igényel, csak a fájl elérési útjainak automatikus kitöltése (nem pedig más lehetőségek) a következő tokenhez.