Os daethoch o hyd i'r dudalen hon mewn chwiliad, mae'n debyg eich bod yn ceisio datrys rhyw broblem gyda rhedeg bash.
Efallai nad yw eich amgylchedd bash yn gosod newidyn amgylchedd ac nad ydych chi'n deall pam. Efallai eich bod wedi glynu rhywbeth mewn amrywiol ffeiliau cist bash neu broffiliau neu bob ffeil ar hap nes iddo weithio.
Mewn unrhyw achos, pwynt y nodyn hwn yw gosod y weithdrefn ar gyfer cychwyn bash mor syml Γ’ phosibl fel y gallwch chi ddelio Γ’ phroblemau.
Diagram
Mae'r siart llif hwn yn crynhoi'r holl brosesau wrth redeg bash.
Nawr gadewch i ni edrych yn agosach ar bob rhan.
Shell Mewngofnodi?
Yn gyntaf mae angen i chi ddewis a ydych chi yn y gragen mewngofnodi ai peidio.
Y gragen mewngofnodi yw'r gragen gyntaf y byddwch chi'n ei nodi pan fyddwch chi'n mewngofnodi ar gyfer sesiwn ryngweithiol. Nid oes angen enw defnyddiwr a chyfrinair ar y gragen mewngofnodi. Gallwch orfodi'r gragen mewngofnodi i ddechrau trwy ychwanegu baner --login
pan y'i gelwir bash
, er enghraifft:
bash --login
Mae'r gragen mewngofnodi yn sefydlu'r amgylchedd sylfaenol pan fyddwch chi'n cychwyn y gragen bash gyntaf.
Rhyngweithiol?
Yna byddwch chi'n penderfynu a yw'r gragen yn rhyngweithiol ai peidio.
Gellir gwirio hyn gan bresenoldeb y newidyn PS1
(mae'n gosod y swyddogaeth mewnbwn gorchymyn):
os [ "${ PS1-}" ]; yna adlais rhyngweithiol arall adleisio anrhyngweithiol fi
Neu weld a yw'r opsiwn wedi'i osod -i
, gan ddefnyddio newidyn cysylltnod arbennig -
mewn bash, er enghraifft:
$echo$-
Os oes symbol yn yr allbwn i
, yna mae'r gragen yn rhyngweithiol.
Yn y gragen mewngofnodi?
Os ydych chi mewn cragen mewngofnodi, yna mae bash yn edrych am y ffeil /etc/profile
ac yn rhedeg os yw'n bodoli.
Yna chwiliwch am unrhyw un o'r tair ffeil hyn yn y drefn ganlynol:
~/.bash_profile ~/.bash_login ~/.profile
Pan fydd yn dod o hyd i un, mae'n ei gychwyn ac yn hepgor y lleill.
Mewn cragen ryngweithiol?
Os ydych mewn cragen nad yw'n mewngofnodi, tybir eich bod eisoes wedi bod mewn cragen mewngofnodi, mae'r amgylchedd wedi'i ffurfweddu a bydd yn cael ei etifeddu.
Yn yr achos hwn, gweithredir y ddwy ffeil ganlynol mewn trefn, os ydynt yn bodoli:
/etc/bash.bashrc ~/.bashrc
Dim opsiwn?
Os nad ydych mewn cragen mewngofnodi neu gragen ryngweithiol, yna bydd eich amgylchedd yn wir yn wag. Mae hyn yn achosi llawer o ddryswch (gweler isod am swyddi cron).
Yn yr achos hwn mae bash yn edrych ar y newidyn BASH_ENV
eich amgylchedd ac yn creu'r ffeil gyfatebol a nodir yno.
Anawsterau Cyffredin a Rheolau Bawd
swyddi cron
95% o'r amser yr wyf yn dadfygio startup bash oherwydd nad yw'r swydd cron yn rhedeg yn Γ΄l y disgwyl.
Y gorchwyl damn hwn yn gweithio'n iawn pan fyddaf yn ei redeg ar y llinell orchymyn, ond yn methu pan fyddaf yn ei redeg yn crontab.
Yma dau reswm:
- Nid yw swyddi Cron yn rhyngweithiol.
- Yn wahanol i sgriptiau llinell orchymyn, nid yw swyddi cron yn etifeddu'r amgylchedd cregyn.
Yn nodweddiadol ni fyddwch yn sylwi nac yn poeni nad yw sgript cragen yn rhyngweithiol oherwydd bod yr amgylchedd yn etifeddu o'r gragen ryngweithiol. Mae hyn yn golygu bod popeth PATH
ΠΈ alias
wedi'i ffurfweddu fel y byddech chi'n ei ddisgwyl.
Dyna pam ei bod yn aml yn angenrheidiol i osod penodol PATH
ar gyfer tasg cron fel yma:
* * * * * PATH=${PATH}:/path/to/my/program/folder myprogram
Sgriptiau yn galw ei gilydd
Problem gyffredin arall yw pan fydd sgriptiau'n cael eu ffurfweddu ar gam i alw ei gilydd. Er enghraifft, /etc/profile
yn cyfeirio at ~/.bashrc
.
Mae hyn fel arfer yn digwydd pan fydd rhywun yn ceisio trwsio rhywfaint o wall ac roedd yn ymddangos bod popeth yn gweithio. Yn anffodus, pan fydd angen i chi wahanu'r gwahanol fathau hyn o sesiynau, mae problemau newydd yn codi.
Llun Sandboxed Docker
Er mwyn arbrofi Γ’ rhedeg cragen, creais ddelwedd Docker y gellir ei defnyddio i ddadfygio rhedeg cragen mewn amgylchedd diogel.
Lansio:
$ docker run -n bs -d imiell/bash_startup
$ docker exec -ti bs bash
Mae Dockerfile wedi'i leoli
I orfodi mewngofnodi ac efelychu cragen mewngofnodi:
$ bash --login
I brofi set o newidynnau BASH_ENV
:
$ env | grep BASH_ENV
Ar gyfer dadfygio crontab
bydd sgript syml yn cael ei gweithredu bob munud (yn /root/ascript
):
$ crontab -l
$ cat /var/log/script.log
Ffynhonnell: hab.com