Running Bash fid-dettall

Jekk sibt din il-paġna waqt tfittxija, probabilment qed tipprova ssolvi xi problema bit-tħaddim ta' bash.

Forsi l-ambjent bash tiegħek mhux qed jistabbilixxi varjabbli ambjentali u ma tifhimx għaliex. Jista 'jkollok staġnati xi ħaġa f'diversi fajls jew profili tal-bash boot jew il-fajls kollha bl-addoċċ sakemm ħadmet.

Fi kwalunkwe każ, il-punt ta 'din in-nota huwa li tistabbilixxi l-proċedura għall-bidu ta' bash sempliċiment kemm jista 'jkun sabiex tkun tista' tittratta l-problemi.

Dijagramma

Din il-flowchart tiġbor fil-qosor il-proċessi kollha meta tħaddem bash.

Running Bash fid-dettall

Issa ejja nagħtu ħarsa aktar mill-qrib lejn kull parti.

Idħol Shell?

L-ewwel trid tagħżel jekk intix fil-qoxra tal-login jew le.

Il-qoxra tal-login hija l-ewwel qoxra li tidħol meta tidħol għal sessjoni interattiva. Il-qoxra tal-login ma teħtieġx username u password. Tista' ġġiegħel il-qoxra tal-login tibda billi żżid bandiera --login meta tissejjaħ bashper eżempju:

bash --login

Il-qoxra tal-login tistabbilixxi l-ambjent bażi meta tibda l-ewwel il-qoxra tal-bash.

Interattiv?

Imbagħad tiddetermina jekk il-qoxra hijiex interattiva jew le.

Dan jista 'jiġi ċċekkjat bil-preżenza tal-varjabbli PS1 (tinstalla l-funzjoni tad-dħul tal-kmand):

jekk [ "${PS1-}" ]; imbagħad echo interattiv inkella echo mhux interattiv fi

Jew ara jekk l-għażla hijiex issettjata -i, billi tuża varjabbli speċjali tas-sing - f'bash, pereżempju:

$echo$-

Jekk hemm simbolu fl-output i, allura l-qoxra hija interattiva.

Fil-qoxra tal-login?

Jekk inti fil-qoxra tal-login, allura bash ifittex il-fajl /etc/profile u taħdem jekk teżisti.

Imbagħad tfittex għal kwalunkwe minn dawn it-tliet fajls fl-ordni li ġejja:

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

Meta jsib wieħed, jibdah u jaqbeż lill-oħrajn.

F'qoxra interattiva?

Jekk inti f'qoxra mhux login, huwa preżunt li inti diġà kont f'qoxra login, l-ambjent huwa kkonfigurat u se jintiret.

F'dan il-każ, iż-żewġ fajls li ġejjin huma esegwiti fl-ordni, jekk jeżistu:

/etc/bash.bashrc ~/.bashrc

L-ebda għażla?

Jekk m'intix la f'qoxra ta' login jew f'qoxra interattiva, allura l-ambjent tiegħek tabilħaqq ikun vojt. Dan jikkawża ħafna konfużjoni (ara hawn taħt dwar l-impjiegi cron).

F'dan il-każ bash iħares lejn il-varjabbli BASH_ENV l-ambjent tiegħek u toħloq il-fajl korrispondenti speċifikat hemmhekk.

Diffikultajiet Komuni u Regoli ta' Thumb

impjiegi cron

95% tal-ħin li niddibaggja l-istartjar tal-bash huwa minħabba li x-xogħol tal-cron mhux qed jaħdem kif mistenni.

Dan il-kompitu kkritikat jaħdem tajjeb meta nmexxih fuq il-linja tal-kmand, iżda jonqos meta nħaddem fil-crontab.

Hawnhekk żewġ raġunijiet:

  • L-impjiegi Cron mhumiex interattivi.
  • B'differenza mill-iskripts tal-linja tal-kmand, l-impjiegi cron ma jirtux l-ambjent tal-qoxra.

Tipikament ma tindunax jew ma tieħu ħsieb li script shell mhuwiex interattiv minħabba li l-ambjent jiret mill-shell interattiv. Dan ifisser li kollox PATH и alias ikkonfigurat kif tistenna.

Dan huwa għaliex ħafna drabi huwa meħtieġ li jiġi stabbilit speċifiku PATH għal kompitu cron bħal hawn:

* * * * * PATH=${PATH}:/path/to/my/program/folder myprogram

Skripts li jsejħu lil xulxin

Problema komuni oħra hija meta l-iskripts huma kkonfigurati bi żball biex isejħu lil xulxin. Pereżempju, /etc/profile jirreferi għal ~/.bashrc.

Dan normalment jiġri meta xi ħadd ipprova jirranġa xi żball u kollox deher li jaħdem. Sfortunatament, meta jkollok bżonn tissepara dawn it-tipi differenti ta 'sessjonijiet, jinqalgħu problemi ġodda.

Immaġni ta' Docker imdawwar bir-ramel

Biex tesperimenta bit-tmexxija ta 'qoxra, ħloqt immaġni Docker li tista' tintuża biex tiddibaggja t-tħaddim ta 'qoxra f'ambjent sigur.

Tnedija:

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

Dockerfile jinsab hawn.

Biex tisforza l-login u tissimula shell tal-login:

$ bash --login

Biex tittestja sett ta 'varjabbli BASH_ENV:

$ env | grep BASH_ENV

Għal debugging crontab skript sempliċi se jiġi esegwit kull minuta (in /root/ascript):

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

Sors: www.habr.com

Żid kumment