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.
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
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