Að keyra Bash í smáatriðum

Ef þú fannst þessa síðu í leit ertu líklega að reyna að leysa vandamál með því að keyra bash.

Kannski er bash umhverfið þitt ekki að stilla umhverfisbreytu og þú skilur ekki hvers vegna. Þú gætir hafa fest eitthvað í ýmsum bash ræsiskrám eða sniðum eða öllum skrám af handahófi þar til það virkaði.

Í öllum tilvikum er tilgangurinn með þessari athugasemd að setja fram aðferðina til að hefja bash eins einfaldlega og mögulegt er svo að þú getir tekist á við vandamál.

Skýringarmynd

Þetta flæðirit tekur saman alla ferla þegar bash er keyrt.

Að keyra Bash í smáatriðum

Nú skulum við líta nánar á hvern hluta.

Innskrá Shell?

Fyrst þarftu að velja hvort þú sért í innskráningarskelinni eða ekki.

Innskráningarskelin er fyrsta skelin sem þú slærð inn þegar þú skráir þig inn í gagnvirka lotu. Innskráningarskelin krefst ekki notendanafns og lykilorðs. Þú getur þvingað innskráningarskelina til að byrja með því að bæta við fána --login þegar hringt er í bash, til dæmis:

bash --innskráning

Innskráningarskelin setur upp grunnumhverfið þegar þú ræsir bash skelina fyrst.

Gagnvirkt?

Þá ákveður þú hvort skelin sé gagnvirk eða ekki.

Þetta er hægt að athuga með tilvist breytunnar PS1 (það setur upp skipanainntaksaðgerðina):

ef [ "${PS1-}" ]; þá echo interactive else echo non-interactive fi

Eða athugaðu hvort valmöguleikinn sé stilltur -i, með því að nota sérstaka bandstrik breytu - í bash, til dæmis:

$echo$-

Ef það er tákn í úttakinu i, þá er skelin gagnvirk.

Í innskráningarskelinni?

Ef þú ert í innskráningarskel, þá leitar bash að skránni /etc/profile og keyrir ef það er til.

Leitar síðan að einhverjum af þessum þremur skrám í eftirfarandi röð:

~/.bash_profile ~/.bash_login ~/.profile

Þegar það finnur einn, ræsir það það og sleppir hinum.

Í gagnvirkri skel?

Ef þú ert í innskráningarskel, er gert ráð fyrir að þú hafir þegar verið í innskráningarskel, umhverfið er stillt og mun ganga í arf.

Í þessu tilviki eru eftirfarandi tvær skrár keyrðar í röð, ef þær eru til:

/etc/bash.bashrc ~/.bashrc

Enginn valkostur?

Ef þú ert hvorki í innskráningarskel né gagnvirkri skel, þá verður umhverfið þitt örugglega tómt. Þetta veldur miklum ruglingi (sjá hér að neðan um cron störf).

Í þessu tilviki horfir bash á breytuna BASH_ENV umhverfi þínu og býr til samsvarandi skrá sem tilgreind er þar.

Algengar erfiðleikar og þumalputtareglur

cron störf

95% af þeim tíma sem ég kemba bash gangsetningu er það vegna þess að cron starfið er ekki í gangi eins og búist var við.

Þetta helvítis verkefni virkar fínt þegar ég keyri það á skipanalínunni, en mistekst þegar ég keyri það í crontab.

Hér tvær ástæður:

  • Cron störf eru ekki gagnvirk.
  • Ólíkt skipanalínuforskriftum erfa cron störf ekki skel umhverfið.

Venjulega muntu ekki taka eftir því að skeljahandrit er ekki gagnvirkt vegna þess að umhverfið erfir frá gagnvirku skelinni. Þetta þýðir að allt PATH и alias stillt eins og þú mátt búast við.

Þess vegna er oft nauðsynlegt að stilla tiltekið PATH fyrir cron verkefni eins og hér:

* * * * * PATH=${PATH}:/path/to/my/program/folder myprogram

Handrit sem kalla hvert annað

Annað algengt vandamál er þegar forskriftir eru ranglega stilltar til að hringja í hvert annað. Til dæmis, /etc/profile höfðar til ~/.bashrc.

Þetta gerist venjulega þegar einhver reyndi að laga einhverja villu og allt virtist virka. Því miður, þegar þú þarft að aðgreina þessar mismunandi tegundir af fundum, koma ný vandamál upp.

Sandboxed Docker mynd

Til að gera tilraunir með að keyra skel bjó ég til Docker mynd sem hægt er að nota til að villuleita að keyra skel í öruggu umhverfi.

Ræsa:

$ docker run -n bs -d imiell/bash_startup
$ docker exec -ti bs bash

Dockerfile er staðsett hér.

Til að þvinga innskráningu og líkja eftir innskráningarskel:

$ bash --login

Til að prófa safn af breytum BASH_ENV:

$ env | grep BASH_ENV

Fyrir villuleit crontab einfalt handrit verður keyrt á hverri mínútu (í /root/ascript):

$ crontab -l
$ cat /var/log/script.log

Heimild: www.habr.com

Bæta við athugasemd