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
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_login
szemantikákat ad. A && cmd
egy 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
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 vi
futtatá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
ésfg
alapé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 fg
parancs 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 jobs
kimeneté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
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.
Leave a Reply