Kui leiate selle lehe otsingust, üritate tõenäoliselt lahendada mingit probleemi bash-i käivitamisega.
Võib-olla ei seadistata teie bash-i keskkonnas keskkonnamuutujat ja te ei saa aru, miks. Võib-olla olete midagi pannud erinevatesse bash-i laadimisfailidesse või profiilidesse, või kõigisse failidesse juhuslikult, kuni see töötas.
Igal juhul on selle märkme mõte tutvustada bash-i käivitamise protseduuri võimalikult lihtsasti, et saaksite probleemidega toime tulla.
Diagramm
See vooskeem kirjeldab kõiki bash-i käivitamise protsesse.

Nüüd vaatame iga osa lähemalt.
Sisselogimisämber?
Esiteks peate otsustama, kas olete sisselogimisämbris või mitte.
Sisselogimisämber on esimene ämber, kuhu sisenete, kui logite sisse interaktiivsesse seanssi. Sisselogimisämber ei nõua kasutajanime ja parooli sisestamist. Saate sisselogimisämber sundida käivitama, lisades lipu --login kui kutsutakse bash, näiteks:
bash --login
Sisselogimisämber seadistab põhikeskkonna, kui bash-i ämbrit esmakordselt käivitatakse.
Interaktiivne?
Seejärel peate määrama, kas ämber on interaktiivne või mitte.
Seda saab kontrollida, kas keskkonnamuutuja on olemas. PS1 (ta seab sisestamise funktsiooni):
if [ "${PS1-}" ]; then
echo interaktiivne
else
echo mitte-interaktiivne
fi Või vaadata, kas parameeter on seadistatud -i, kasutades erilist miinusmärkide muutujat - bashis, näiteks:
$ echo $-
Kui väljundis on sümbol i, siis on shell interaktiivne.
Sisselogimise shellis?
Kui olete sisselogimise shellis, siis bash otsib faili /etc/profile ja käivitab selle, kui see eksisteerib.
Siis otsib ta ühte neist kolmest failist järgmises järjekorras:
~/.bash_profile ~/.bash_login ~/.profile
Kui ta leiab ühe, käivitab ta selle ja jätab teised vahele.
Interaktiivses shellis?
Kui olete interaktiivses shellis ilma sisselogimiseta (mitte-sisselogimise shell), eeldatakse, et olete juba olnud sisselogimise shellis, keskkond on seadistatud ja see pärandatakse.
Sel juhul käivitatakse järjekorras järgmised kaks faili, kui need eksisteerivad:
/etc/bash.bashrc ~/.bashrc
Ühtegi varianti?
Kui te ei ole ei sisselogimise ega ka interaktiivses shellis, siis on teie keskkond tõepoolest tühi. See tekitab suurt segadust (vt allpool cron-ülesannete kohta).
Sel juhul vaatab bash muutujat BASH_ENV teie keskkonnas ja loob vastava faili, mis on seal määratud.
Tüüpilised raskused ja praktilised reeglid
Croni ülesanded
95% juhtudel on minu bash-käivituse tõrgete põhjuseks see, et cron'i ülesanne ei tööta nii, nagu oodatud.
See neetud ülesanne töötab normaalselt, kui ma käivitan selle käsurealt, kuid ebaõnnestub crontabis käivitamisel.
Siit kaks põhjust:
- Croni ülesanded ei ole interaktiivsed.
- Erinevalt käsurea skriptidest ei pärine cron'i ülesanded keskkonnast.
Tavaliselt te ei märka ega hooli sellest, et shelli skript ei ole interaktiivne, kuna keskkond pärineb interaktiivsest shellist. See tähendab, et kõik PATH ja alias on seadistatud nii, nagu ootate.
Sellepärast tuleb sageli seadistada kindel PATH cron'i ülesande jaoks, nagu siin:
* * * * * PATH=${PATH}:/path/to/my/program/folder myprogramSkriptid, mis kutsuvad üksteist
Veel üks levinud probleem, kui skriptid kogemata kutsuvad üksteist. Näiteks, /etc/profile viitab ~/.bashrc.
Tavaliselt juhtub see, kui keegi püüab parandada teatud viga ja paistab, et kõik töötab. Kahjuks, kui tuleb eristada neid erinevaid sessioone, tekivad uued probleemid.
Docker image liivakastis
Katsumiseks, kuidas shelli käivitada, lõin Docker'i pildi, mida saab kasutada shelli käivitamise silumiseks turvalises keskkonnas.
Käivitamine:
$ docker run -n bs -d imiell/bash_startup
$ docker exec -ti bs bashDockerfile asub .
Sundlogin ja shelli sisendi simuleerimiseks:
$ bash --login Muutuja komplekti kontrollimiseks BASH_ENV:
$ env | grep BASH_ENV Silumiseks crontab iga minuti järel käivitatakse lihtne skript ( /root/ascript):
$ crontab -l
$ cat /var/log/script.logAllikas: habr.com
