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.
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ħ bash
per 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
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