သင်ရှာဖွေမှုတစ်ခုတွင် ဤစာမျက်နှာကိုတွေ့ရှိပါက၊ သင်သည် bash လုပ်ဆောင်ခြင်းဆိုင်ရာ ပြဿနာအချို့ကို ဖြေရှင်းရန် ကြိုးစားနေပေမည်။
သင့် bash ပတ်၀န်းကျင်သည် ပတ်၀န်းကျင်ပြောင်းလွဲပြောင်းကို မသတ်မှတ်ဘဲ အဘယ်ကြောင့်ဖြစ်သည်ကို သင် နားမလည်နိုင်ပေ။ အလုပ်မလုပ်မချင်း bash boot ဖိုင်များ သို့မဟုတ် ပရိုဖိုင်များ သို့မဟုတ် ဖိုင်များအားလုံးတွင် တစ်ခုခုကို ကြုံရာကျပန်းလုပ်၍မရပါ။
မည်သို့ပင်ဆိုစေကာမူ ဤမှတ်စု၏အချက်မှာ ပြဿနာများကိုဖြေရှင်းနိုင်စေရန် bash စတင်ခြင်းအတွက် ရိုးရှင်းနိုင်သမျှ ရိုးရှင်းစွာလုပ်ဆောင်ရန်ဖြစ်သည်။
ပုံကြမ်း
ဤအစီအစဥ်ဇယားသည် bash လုပ်ဆောင်သည့်အခါ လုပ်ငန်းစဉ်အားလုံးကို အကျဉ်းချုပ်ဖော်ပြသည်။
ကဲ အပိုင်းတစ်ခုချင်းစီကို အနီးကပ်လေ့လာကြည့်ရအောင်။
Shell အကောင့်ဝင်မလား။
ပထမဦးစွာ သင်သည် login shell တွင်ရှိနေသည်ဖြစ်စေ မပါဝင်သည်ကို ရွေးချယ်ရန် လိုအပ်ပါသည်။
အပြန်အလှန်အကျိုးသက်ရောက်သော session တစ်ခုအတွက် login ဝင်သောအခါတွင် login shell သည် သင်ဝင်ရောက်သည့် ပထမဆုံး shell ဖြစ်သည်။ လော့ဂ်အင်ခွံသည် အသုံးပြုသူအမည်နှင့် စကားဝှက် မလိုအပ်ပါ။ အလံတစ်ခုထည့်ခြင်းဖြင့် စတင်ရန် login shell ကို သင် တွန်းအားပေးနိုင်သည်။ --login
ခေါ်သောအခါ bash
ဥပမာ:
bash --login
သင် bash shell ကိုပထမဆုံးစတင်သောအခါတွင် login shell သည် base environment ကိုသတ်မှတ်ပေးသည်။
အပြန်အလှန်အကျိုးသက်ရောက်မှုရှိပါသလား။
ထို့နောက် shell သည် အပြန်အလှန်အကျိုးသက်ရောက်မှုရှိမရှိကို သင်ဆုံးဖြတ်သည်။
၎င်းကို variable ၏ရှေ့မှောက်တွင်စစ်ဆေးနိုင်သည်။ PS1
(၎င်းသည် command input function ကိုထည့်သွင်းသည်)
အကယ်၍ [ "${PS1-}" ]; ထို့နောက် ပဲ့တင်သံ အပြန်အလှန် တုံ့ပြန်သော အခြား ပဲ့တင်သံသည် အပြန်အလှန် တုံ့ပြန်မှု မဟုတ်သော fi ဖြစ်သည်။
သို့မဟုတ် ရွေးချယ်မှုသတ်မှတ်ထားခြင်းရှိမရှိ ကြည့်ရှုပါ။ -i
အထူးတုံးတိုကိန်းရှင်ကို အသုံးပြုထားသည်။ -
bash တွင်၊ ဥပမာ-
$echo$-
အထွက်တွင် သင်္ကေတတစ်ခုရှိလျှင် i
ထို့နောက် shell သည် အပြန်အလှန်အကျိုးသက်ရောက်သည်။
လော့ဂ်အင်ခွံမှာလား။
သင်သည် login shell တွင်ရှိနေပါက bash သည် ဖိုင်ကိုရှာဖွေသည်။ /etc/profile
ရှိလျှင် run ပါ။
ထို့နောက် အောက်ပါအစီအစဥ်အတိုင်း ဤဖိုင်သုံးခုအနက်မှ တစ်ခုခုကို ရှာဖွေသည်-
~/.bash_profile ~/.bash_login ~/.profile
တစ်ခုကိုတွေ့သောအခါ၊ ၎င်းကိုစတင်ပြီး အခြားတစ်ခုကို ကျော်သွားနိုင်သည်။
အပြန်အလှန်အကျိုးသက်ရောက်မှုရှိသော shell တွင်?
သင်သည် လော့ဂ်အင်မဟုတ်သော ရှဲလ်တစ်ခုတွင် ရှိနေပါက၊ သင်သည် လော့ဂ်အင်ခွံတစ်ခုတွင် ရှိနေပြီဖြစ်ကြောင်း၊ ပတ်ဝန်းကျင်သည် စီစဉ်သတ်မှတ်ထားပြီး အမွေဆက်ခံသွားလိမ့်မည်ဟု ယူဆရသည်။
ဤကိစ္စတွင်၊ ၎င်းတို့ရှိလျှင် အောက်ပါဖိုင်နှစ်ခုကို အစဉ်လိုက်လုပ်ဆောင်သည်-
/etc/bash.bashrc ~/.bashrc
ရွေးချယ်ခွင့်မရှိဘူးလား?
သင်သည် login shell သို့မဟုတ် အပြန်အလှန်အကျိုးသက်ရောက်မှု shell တွင်မရှိပါက၊ သင့်ပတ်ဝန်းကျင်သည် အမှန်ပင် ဗလာဖြစ်နေလိမ့်မည်။ ၎င်းသည် များစွာသော ရှုပ်ထွေးမှုကို ဖြစ်စေသည် (cron အလုပ်များအကြောင်း အောက်တွင် ကြည့်ပါ)။
ဤကိစ္စတွင် bash သည် variable ကိုကြည့်သည်။ BASH_ENV
သင့်ပတ်ဝန်းကျင်တွင် သတ်မှတ်ထားသော သက်ဆိုင်ရာဖိုင်ကို ဖန်တီးပါ။
အဖြစ်များသောအခက်အခဲများနှင့် လက်မ၏စည်းမျဉ်းများ
cron အလုပ်များ
ကျွန်တော် bash startup ကို debug လုပ်တဲ့အချိန်ရဲ့ 95% က cron အလုပ်က မျှော်လင့်ထားသလို မလည်ပတ်နိုင်လို့ပါ။
ဒါ မင်းကွာ အလုပ်ပဲ။ ၎င်းကို command line တွင် run သောအခါတွင် ကောင်းမွန်သော်လည်း crontab တွင် run သောအခါတွင် အဆင်မပြေပါ။.
ဒါဟာဖြစ်ပါတယ် အကြောင်းရင်းနှစ်ခု:
- Cron အလုပ်များသည် အပြန်အလှန်အကျိုးသက်ရောက်မှုမရှိပါ။
- command line script များနှင့်မတူဘဲ၊ cron အလုပ်များသည် shell ပတ်ဝန်းကျင်ကို အမွေမခံရပါ။
ပုံမှန်အားဖြင့် ပတ်ဝန်းကျင်သည် အပြန်အလှန်အကျိုးပြုသည့် shell မှ အမွေဆက်ခံသောကြောင့် shell script သည် အပြန်အလှန်အကျိုးသက်ရောက်မှုမရှိသည်ကို သင်သတိမထားမိ သို့မဟုတ် ဂရုမစိုက်ပါ။ ဆိုလိုသည်မှာ အရာအားလုံးဖြစ်သည်။ PATH
и alias
သင်မျှော်လင့်ထားသည့်အတိုင်း ပြင်ဆင်ထားသည်။
အဘယ်ကြောင့်ဆိုသော် သီးခြားသတ်မှတ်ရန် လိုအပ်ပါသည်။ PATH
ဤကဲ့သို့သော cron အလုပ်အတွက်
* * * * * PATH=${PATH}:/path/to/my/program/folder myprogram
ဇာတ်ညွှန်းများ အချင်းချင်း ခေါ်ကြသည်။
နောက်ထပ် အဖြစ်များသည့် ပြဿနာမှာ script များကို တစ်ခုနှင့်တစ်ခု ခေါ်ဆိုရန် မှားယွင်းစွာ စီစဉ်သတ်မှတ်ထားသည့်အခါ ဖြစ်သည်။ ဥပမာအားဖြင့်, /etc/profile
ပန်ကြားသည်။ ~/.bashrc
.
တစ်စုံတစ်ဦးသည် အမှားအယွင်းအချို့ကို ပြုပြင်ရန်ကြိုးစားပြီး အရာအားလုံး အလုပ်ဖြစ်ပုံရသောအခါတွင် ၎င်းသည် များသောအားဖြင့် ဖြစ်ပေါ်တတ်သည်။ ကံမကောင်းစွာဖြင့်၊ သင်သည် ဤကွဲပြားသော session အမျိုးအစားများကို ခွဲထုတ်ရန် လိုအပ်သောအခါတွင် ပြဿနာအသစ်များ ပေါ်လာပါသည်။
Sandboxed Docker ပုံ
Shell တစ်ခုကို လုပ်ဆောင်ခြင်းအတွက် စမ်းသပ်ရန်အတွက်၊ လုံခြုံသောပတ်ဝန်းကျင်တွင် shell တစ်ခုလုပ်ဆောင်ခြင်းကို အမှားရှာရန် အသုံးပြုနိုင်သည့် Docker ပုံတစ်ခုကို ဖန်တီးခဲ့သည်။
ပစ်လွှတ်ခြင်း-
$ docker run -n bs -d imiell/bash_startup
$ docker exec -ti bs bash
Dockerfile သည်တည်ရှိသည်။
အကောင့်ဝင်ရန် အတင်းအကြပ်လုပ်ပြီး အကောင့်ဝင်သည့်ခွံကို အတုယူရန်-
$ bash --login
variable အစုံကို စမ်းသပ်ရန် BASH_ENV
:
$ env | grep BASH_ENV
အမှားရှာပြင်ခြင်းအတွက် crontab
ရိုးရှင်းသော ဇာတ်ညွှန်းကို မိနစ်တိုင်း လုပ်ဆောင်ပေးမည် (in /root/ascript
):
$ crontab -l
$ cat /var/log/script.log
source: www.habr.com