Bashi käitamine üksikasjalikult

Kui leidsite selle lehe otsinguga, proovite tõenäoliselt lahendada mõnda bashi käivitamise probleemi.

Võib-olla ei määra teie bash-keskkond keskkonnamuutujat ja te ei saa aru, miks. Võimalik, et olete midagi kinni pannud erinevatesse bashi alglaadimisfailidesse või -profiilidesse või kõik failid juhuslikult, kuni see töötas.

Igal juhul on selle märkuse mõte selles, et bashi käivitamise protseduur oleks võimalikult lihtne, et saaksite probleemidega toime tulla.

Skeem

See vooskeem võtab kokku kõik protsessid bashi käivitamisel.

Bashi käitamine üksikasjalikult

Nüüd vaatame iga osa lähemalt.

Logi sisse Shelli?

Kõigepealt peate valima, kas olete sisselogimiskestas või mitte.

Sisselogimisshell on esimene kest, mille sisestate interaktiivsele seansile sisse logides. Sisselogimisshell ei nõua kasutajanime ja parooli. Saate sundida sisselogimisshelli käivitama lipu lisamisega --login kui kutsutakse bash, näiteks:

bash -- login

Sisselogimisshell seadistab bash-shelli esmakordsel käivitamisel baaskeskkonna.

Interaktiivne?

Seejärel saate kindlaks teha, kas kest on interaktiivne või mitte.

Seda saab kontrollida muutuja olemasoluga PS1 (see installib käsu sisestusfunktsiooni):

if [ "${PS1-}" ]; siis kaja interaktiivne else kaja mitteinteraktiivne fi

Või vaadake, kas valik on määratud -i, kasutades spetsiaalset sidekriipsu muutujat - bashis näiteks:

$echo$-

Kui väljundis on sümbol i, siis on kest interaktiivne.

Sisselogimiskestas?

Kui olete sisselogimisshellis, otsib bash faili /etc/profile ja töötab, kui see on olemas.

Seejärel otsib mis tahes neist kolmest failist järgmises järjekorras:

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

Kui see ühe leiab, käivitab see selle ja jätab teised vahele.

Interaktiivses kestas?

Kui olete sisselogimata kestas, eeldatakse, et olete juba sisselogimisshellis olnud, keskkond on konfigureeritud ja päritakse.

Sel juhul käivitatakse järgmised kaks faili, kui need on olemas:

/etc/bash.bashrc ~/.bashrc

Kas valikuvõimalust pole?

Kui te ei ole sisselogimiskestas ega interaktiivses kestas, on teie keskkond tõepoolest tühi. See tekitab palju segadust (vt allpool cron-tööde kohta).

Sel juhul vaatab bash muutujat BASH_ENV oma keskkonda ja loob seal määratud vastava faili.

Levinud raskused ja rusikareeglid

cron töökohad

95% juhtudest silun bashi käivitamist seetõttu, et cron töö ei tööta ootuspäraselt.

See neetud ülesanne töötab hästi, kui käivitan selle käsureal, kuid ebaõnnestub, kui käivitan selle crontabis.

see on kaks põhjust:

  • Croni töökohad ei ole interaktiivsed.
  • Erinevalt käsurea skriptidest ei päri cron-tööd kestakeskkonda.

Tavaliselt te ei märka ega hooli sellest, et kestaskript pole interaktiivne, kuna keskkond pärineb interaktiivsest kestast. See tähendab, et kõik PATH и alias konfigureeritud nii, nagu ootate.

Seetõttu on sageli vaja määrata konkreetne PATH cron ülesande jaoks nagu siin:

* * * * * PATH=${PATH}:/tee/minu/programmi/kausta minuprogramm

Üksteisele helistavad skriptid

Teine levinud probleem on see, kui skriptid on ekslikult konfigureeritud üksteisele helistama. Näiteks, /etc/profile apelleerib ~/.bashrc.

Tavaliselt juhtub see siis, kui keegi üritas viga parandada ja kõik näis toimivat. Kahjuks tekivad uued probleemid, kui teil on vaja neid eri tüüpi seansse eraldada.

Sandboxed Dockeri pilt

Shelli käitamise katsetamiseks lõin Dockeri pildi, mida saab kasutada shelli käitamise silumiseks turvalises keskkonnas.

Käivitamine:

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

Dockerfile asub siin.

Sisselogimise sundimiseks ja sisselogimisshelli simuleerimiseks tehke järgmist.

$ bash --login

Muutujate komplekti testimiseks BASH_ENV:

$ env | grep BASH_ENV

Silumiseks crontab iga minut käivitatakse lihtne skript (in /root/ascript):

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

Allikas: www.habr.com

Lisa kommentaar