Kaip vykdyti komandas iš apvalkalo scenarijaus

How Execute Commands From Within Shell Script



„Bash“ komandų vykdymas iš apvalkalo scenarijaus iš pradžių gali būti šiek tiek bauginantis ir gali pareikalauti tikėjimo šuolio. Galų gale, komandos, vykdomos naudojant „bash“ scenarijų, nėra interaktyvios. Čia mes nustatysime pagrindą vykdyti komandas iš apvalkalo scenarijaus ir atsakysime į šiuos klausimus apie komandas: Iš kur jie kilę? Kas jie tokie? Kaip mes juos naudojame scenarijuje?

Iš kur kyla komandos?

„Bash“ komandos priklauso bet kuriai iš šių kategorijų:







Bash pats (žr.

„Bash“ yra su savo komandų rinkiniu, leidžiančiu pasiekti jo integruotas funkcijas, tokias kaip masyvų deklaravimas, failo eilučių skaitymas ir kitos funkcijos, integruotos į „bash“. Mes vadiname šios kategorijos komandas, „bash builtin“ komandas arba trumpai „builtins“.



Vykdomosios programos jūsų aplinkoje (žr. Išorines komandas)

Pagal numatytuosius nustatymus „bash“ paveldės tam tikrus kintamuosius pagal numatytuosius nustatymus. Tai pastebima PATH kintamojo atveju, įskaitant vykdomųjų failų vietas, kurios yra nurodomos kaip išorinės komandos bash. Tai yra, jei garbanoti komanda yra jūsų kelyje, ji gali būti vykdoma iš „bash“ scenarijaus taip pat, kaip ir interaktyviu režimu. Mes vadiname šios kategorijos komandas, išorines komandas arba trumpai komandas.



Vartotojo apibrėžta funkcija (žr. Funkcijas)

Prieš vykdydamas išorines komandas ir įtaisus, „bash“ patikrina, ar yra apibrėžta funkcija. Jei taip, funkcija vykdoma kaip komanda. Jei ne, komandų eiliškumas mažinamas. Norint vykdyti funkciją, apibrėžtą už scenarijaus ribų, jos turi būti deklaruojamos su atributu -x; priešingu atveju jie gali būti įtraukti naudojant. Komanda. Šios kategorijos komandas vadiname vartotojo apibrėžtomis funkcijomis arba trumpai.





Kas yra komandos

Komanda yra bet koks žodis, kuris turi būti laikomas vienu programos įėjimo tašku apvalkalo aplinkoje. Jei komanda vykdoma, pati komanda ir pasirenkami argumentai perduodami kaip padėties parametrai, $ {0}, $ {1}, $ {2},… Nulinis padėties parametras ($ {0}) žymi pati komanda ir kontekste nesikeičia. Tai yra, skirtingai nuo funkcinių parametrų $ {1}, $ {2},… kurie gali keistis priklausomai nuo konteksto, $ {0} tarp funkcijų iškvietimų nesikeičia.

Komandų apimtis priklauso nuo deklaracijos vietos ir atributų, priskirtų kaip visuotinė, integruota į „bash“ arba vietinė jūsų „bash“ programai.



Čia yra komandų tipų, kuriuos reikia žinoti, sąrašas.

Integruotos komandos

Tai pirmos klasės „bash“ visatos piliečiai, įskaitant tokius simbolius kaip „.“ „:“ „[„ „]“ Ir tokius rezervuotus žodžius kaip „deklaruoti bash“. Jūs tikitės, kad šias komandas, esančias „bash builtin“ komandų sąraše, bus galima naudoti pagal „bash“ scenarijų.

Atsižvelgiant į jūsų „bash“ vertėjo pavadinimą ir versijos numerį, kai kurios komandos gali būti nepasiekiamos.

Išorinės komandos

Išorinės komandos yra vykdomosios programos, prieinamos už bash scenarijaus ribų, tokių kaip curl. Skirtingai nuo funkcijų, išorinės komandos nėra saugomos kaip kintamieji.

Kuo mažesnė komandos tipo pirmenybė, tuo vėliau komanda gali būti interpretuojama. Išorinės komandos turi žemiausią pirmenybės eilutę bash. Tai yra prieš paleidžiant išorinę komandą, vertėjas bash, ieškos funkcijų, tada integruotų ir galiausiai bandys išsiaiškinti, ar komanda egzistuoja išorėje. Jei ne, turėtumėte pamatyti šią klaidą.

bash: unknown-command:komandąnerastas

„Bash“ scenarijuje funkcijos gali nepaisyti išorinių komandų elgesio, jei jos turi tą patį pavadinimą, kokį matėme anksčiau „curl bash“ pavyzdžiuose. Toliau pateikiamas pasirinktinės išorinės komandos, naudojant funkciją, pavyzdys.

garbanoti() {
komandą $ {FUNCNAME}...
}

Tai veikia, nes funkcijos turi didesnę pirmenybę nei išorinės komandos ir netgi integruotos bash. Apribojimas yra leidžiami simboliai funkcijos pavadinime.

Atminkite, kad aukščiau pateiktas pavyzdys gali būti atliktas naudojant tokį slapyvardį.

slapyvardis garbanoti= '
{
garbanoti ...
}
'

Pseudonimų atveju komandos tipas gali skirtis priklausomai nuo vykdymo konteksto, tuo tarpu, kai naudojamos pasirinktinės išorinės komandos, naudojant funkcijų metodą, įėjimo taškas visada yra funkcija.

Funkcijos

Funkcijos galioja bash. Prieš žiūrėdamas į įmontuotas ir išorines komandas, „bash“ patikrina, ar funkcija, apibrėžta kandidato funkcijos pavadinimu, pirmasis žodis, rodomas eilutėje ar po jo; simbolis, nurodantis komandinės eilutės pabaigą. Vienintelė išimtis yra „bash“ kintamieji, parašyti didžiosiomis raidėmis, pvz., $ {FUNCNAME}.

slapyvardis() { FUNCNAME= asdf;išmetė {@ ,,} USD;}
slapyvardis garbanoti=„TEST CURL ALIAS“ #?

Paprastos komandos

Paprastos komandos bash man puslapiuose apibrėžiamos kaip žodis, po kurio pateikiami neprivalomi argumentai. Atsižvelgiant į tai, paprasta komanda gali būti integruota, išorinė komanda arba funkcija.

Kaip vykdyti komandas iš „bash“ scenarijaus

Dabar, kai žinome, kokių tipų komandos yra prieinamos, galime išplėsti, kaip jas naudoti scenarijuose. Pirma, turime žinoti, kaip komandų pirmenybė veikia „bash“.

Štai keletas būdų, kaip valdyti „bash“ scenarijaus pirmenybę.

Tegul Bashas nusprendžia

command_name

Daugeliu atvejų, ypač pradžioje, mes tiesiog leidžiame bash nuspręsti, kurią komandą naudoti. Tačiau yra atvejų, kai jūsų ketinimas gali būti netinkamai interpretuojamas bash. Taip atsitinka, kai funkcijų pavadinimai ir išorinės komandos arba integruotos dalys sutampa.

Vykdykite išorinę komandą

komandącommand_name

Tarkime, kad yra išorinė komanda command_name, kurią galima naudoti interaktyviu režimu, ir jūs norite ją naudoti „bash“ scenarijuje. Mes galime aiškiai pasakyti bash, kad command_name yra išorinė komanda, naudojant komandą builtin.

Išorinių komandų pavyzdžiai

Išorinių komandų pavyzdžiai, jei yra įdiegta:

failą
eiti
figūrėlė
Pavyzdys: gaukite failo tipą ir informaciją
{ # gauti failo tipą ir informaciją
failą $ {infile} # (1,2)
}
# (1) komanda, failas
# (2) infile = {Kelias į failą}
Pavyzdys: pakeiskite ir sukurkite naujus failus „git“
{ # etapo failai „git“
pridėk.# (1)
}
# (1) komanda, git
Pavyzdys: sukurkite „ascii art“ naudodami figūrą
{ # kurti ascii meną
figūrėlė$ {message} # (1,2)
}
# (1) komanda, figulė
# (2) message = {Pranešimas rodomas kaip ascii art}

Vykdykite įmontuotą komandą

pastatytascommand_name

Tarkime, kad komanda_pavadinimas yra viena iš komandų, apibrėžtų kaip integruota „bash“. Norėdami pranešti „bash“, kad norime paleisti „command_name“ kaip integruotą, mes naudojame „builtin builtin“.

Builtin komandų pavyzdžiai
Pavyzdys: kiek įmontuotų?
pastatytas{,}{,,}{,,,} # kiek įmontuotų?
Pavyzdys: Fantomas deklaruoja
{
skelbti() { išmetėoi!;}
skelbti- xfskelbti #?
}

Išvada

Gana lengva vykdyti komandą iš „bash shell“ scenarijaus. Yra trys pagrindiniai komandų tipai. Žinant, kaip paprastos komandos aiškinamos „bash“, galima geriau kontroliuoti, kokio tipo komanda vykdoma vykdymo metu.