Sīkāk palaist Bash

Ja meklējāt šo lapu, iespējams, mēģināt atrisināt kādu problēmu ar bash palaišanu.

Iespējams, ka jūsu bash vide neiestata vides mainīgo, un jūs nesaprotat, kāpēc. Iespējams, esat kaut ko iestrēdzis dažādos bash sāknēšanas failos vai profilos vai visos failos pēc nejaušības principa, līdz tas strādāja.

Jebkurā gadījumā šīs piezīmes mērķis ir pēc iespējas vienkāršāk izklāstīt bash palaišanas procedūru, lai jūs varētu tikt galā ar problēmām.

Диаграмма

Šajā blokshēmā ir apkopoti visi procesi, palaižot bash.

Sīkāk palaist Bash

Tagad apskatīsim katru daļu tuvāk.

Pieteikties Shell?

Vispirms jums ir jāizvēlas, vai atrodaties pieteikšanās čaulā vai nē.

Pieteikšanās apvalks ir pirmais apvalks, ko ievadāt, piesakoties interaktīvai sesijai. Pieteikšanās apvalkam nav nepieciešams lietotājvārds un parole. Varat piespiest pieteikšanās čaulu sākt, pievienojot karogu --login kad sauc bash, piemēram:

bash -- pieteikšanās

Pieteikšanās čaula iestata bāzes vidi, kad pirmo reizi startējat bash apvalku.

Interaktīvs?

Pēc tam jūs nosakāt, vai apvalks ir interaktīvs vai nē.

To var pārbaudīt pēc mainīgā lieluma klātbūtnes PS1 (tas instalē komandu ievades funkciju):

if [ "${PS1-}" ]; tad echo interactive else echo neinteraktīvā fi

Vai arī pārbaudiet, vai opcija ir iestatīta -i, izmantojot īpašu defises mainīgo - bash valodā, piemēram:

$echo$-

Ja izvadā ir simbols i, tad apvalks ir interaktīvs.

Pieteikšanās čaulā?

Ja atrodaties pieteikšanās čaulā, bash meklē failu /etc/profile un darbojas, ja tāda pastāv.

Pēc tam meklē kādu no šiem trim failiem šādā secībā:

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

Kad tas atrod vienu, tas sāk to un izlaiž pārējos.

Interaktīvā apvalkā?

Ja atrodaties nepieteikšanās čaulā, tiek pieņemts, ka jau esat bijis pieteikšanās čaulā, vide ir konfigurēta un tiks mantota.

Šajā gadījumā secībā tiek izpildīti šādi divi faili, ja tādi pastāv:

/etc/bash.bashrc ~/.bashrc

Nav variantu?

Ja neatrodaties ne pieteikšanās čaulā, ne interaktīvajā čaulā, jūsu vide patiešām būs tukša. Tas rada daudz neskaidrību (skatiet tālāk par cron darbiem).

Šajā gadījumā bash aplūko mainīgo BASH_ENV jūsu vidē un izveido atbilstošo tur norādīto failu.

Bieži sastopamās grūtības un īkšķa noteikumi

cron darbavietas

95% gadījumu es atkļūdoju bash startēšanu, jo cron darbs nedarbojas, kā paredzēts.

Šis nolādētais uzdevums darbojas labi, kad es to palaižu komandrindā, bet neizdodas, kad es to palaižu programmā crontab.

Šeit divi iemesli:

  • Cron darbi nav interaktīvi.
  • Atšķirībā no komandrindas skriptiem, cron darbi nepārmanto čaulas vidi.

Parasti jūs nepamanīsit, vai čaulas skripts nav interaktīvs, jo vide ir mantota no interaktīvās čaulas. Tas nozīmē, ka viss PATH и alias konfigurēts, kā jūs gaidāt.

Tāpēc bieži vien ir nepieciešams iestatīt konkrētu PATH cron uzdevumam, piemēram, šeit:

* * * * * PATH=${PATH}:/ceļš/uz/mana/programma/mape mana programma

Skripti zvana viens otram

Vēl viena izplatīta problēma ir tad, kad skripti ir kļūdaini konfigurēti, lai zvanītu viens otram. Piemēram, /etc/profile aicina ~/.bashrc.

Tas parasti notiek, kad kāds mēģināja labot kādu kļūdu, un šķiet, ka viss darbojas. Diemžēl, kad jums ir jānodala šie dažāda veida sesijas, rodas jaunas problēmas.

Sandboxed Docker attēls

Lai eksperimentētu ar čaulas palaišanu, es izveidoju Docker attēlu, ko var izmantot, lai atkļūdotu čaulas palaišanu drošā vidē.

Palaist:

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

Dockerfile atrodas šeit.

Lai piespiestu pieteikties un simulētu pieteikšanās čaulu:

$ bash --login

Lai pārbaudītu mainīgo lielumu kopu BASH_ENV:

$ env | grep BASH_ENV

Atkļūdošanai crontab Vienkāršs skripts tiks izpildīts katru minūti (in /root/ascript):

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

Avots: www.habr.com

Pievieno komentāru