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