Bash ධාවනය විස්තරාත්මකව

ඔබ සෙවුමකදී මෙම පිටුව සොයා ගත්තේ නම්, ඔබ බොහෝ විට bash ධාවනය කිරීමේදී යම් ගැටළුවක් විසඳීමට උත්සාහ කරයි.

සමහර විට ඔබේ bash පරිසරය පරිසර විචල්‍යයක් සකසන්නේ නැති අතර ඒ මන්දැයි ඔබට නොතේරේ. ඔබ එය ක්‍රියාත්මක වන තුරු අහඹු ලෙස විවිධ bash boot files හෝ profiles හෝ all files තුළ යමක් සිරවී තිබිය හැක.

ඕනෑම අවස්ථාවක, මෙම සටහනේ කාරණය වන්නේ ඔබට ගැටළු සමඟ කටයුතු කිරීමට හැකි වන පරිදි හැකි තරම් සරලව bash ආරම්භ කිරීමේ ක්රියා පටිපාටිය සකස් කිරීමයි.

රූප සටහන

මෙම ගැලීම් සටහන bash ධාවනය කරන විට සියලුම ක්‍රියාවලි සාරාංශ කරයි.

Bash ධාවනය විස්තරාත්මකව

දැන් අපි එක් එක් කොටස් දෙස සමීපව බලමු.

ලොගින් ෂෙල්?

මුලින්ම ඔබ පිවිසුම් කවචයේ සිටිනවාද නැද්ද යන්න තෝරා ගත යුතුය.

පිවිසුම් කවචය යනු ඔබ අන්තර්ක්‍රියාකාරී සැසියකට ලොග් වූ විට ඔබ ඇතුළු කරන පළමු කවචයයි. පිවිසුම් කවචයට පරිශීලක නාමයක් සහ මුරපදයක් අවශ්‍ය නොවේ. ධජයක් එක් කිරීමෙන් ඔබට පිවිසුම් කවචය ආරම්භ කිරීමට බල කළ හැක --login ඇමතූ විට bashඋදාහරණයක් ලෙස:

bash --login

ඔබ මුලින්ම bash shell එක ආරම්භ කරන විට login shell එක මූලික පරිසරය සකසයි.

අන්තර්?

එවිට ඔබ කවචය අන්තර්ක්‍රියාකාරීද නැද්ද යන්න තීරණය කරයි.

විචල්‍යය තිබීමෙන් මෙය පරීක්ෂා කළ හැකිය PS1 (එය විධාන ආදාන කාර්යය ස්ථාපනය කරයි):

[ "${PS1-}" ] නම්; පසුව echo අන්තර්ක්‍රියාකාරී වෙනත් echo අන්තර්ක්‍රියාකාරී නොවන fi

නැතහොත් විකල්පය සකසා ඇත්දැයි බලන්න -i, විශේෂ හයිෆන් විචල්‍යයක් භාවිතා කිරීම - bash දී, උදාහරණයක් ලෙස:

$echo$-

ප්රතිදානයේ සංකේතයක් තිබේ නම් i, එවිට කවචය අන්තර් ක්රියාකාරී වේ.

පිවිසුම් කවචයේද?

ඔබ පිවිසුම් කවචයක සිටී නම්, bash ගොනුව සොයයි /etc/profile සහ එය පවතී නම් ක්රියාත්මක වේ.

ඉන්පසු පහත දැක්වෙන අනුපිළිවෙලින් මෙම ගොනු තුනෙන් ඕනෑම එකක් සොයන්න:

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

එය එකක් සොයාගත් විට, එය එය ආරම්භ කර අනෙක් ඒවා මඟ හරියි.

අන්තර්ක්‍රියාකාරී කවචයකද?

ඔබ සිටින්නේ ලොගින් නොවන කවචයක නම්, ඔබ දැනටමත් පිවිසුම් කවචයක සිට ඇති බව උපකල්පනය කෙරේ, පරිසරය වින්‍යාස කර ඇති අතර එය උරුම වනු ඇත.

මෙම අවස්ථාවෙහිදී, පහත ගොනු දෙක තිබේ නම් ඒවා අනුපිළිවෙලින් ක්‍රියාත්මක වේ:

/etc/bash.bashrc ~/.bashrc

විකල්පයක් නැද්ද?

ඔබ පිවිසුම් කවචයක හෝ අන්තර්ක්‍රියාකාරී කවචයක නොමැති නම්, ඔබේ පරිසරය සැබවින්ම හිස් වනු ඇත. මෙය බොහෝ ව්‍යාකූලත්වයක් ඇති කරයි (cron jobs ගැන පහත බලන්න).

මෙම අවස්ථාවේදී bash විචල්යය දෙස බලයි BASH_ENV ඔබගේ පරිසරය සහ එහි දක්වා ඇති අනුරූප ගොනුව නිර්මාණය කරයි.

පොදු දුෂ්කරතා සහ මාපටැඟිල්ලේ නීති

cron රැකියා

මම debug bash startup කරන අවස්ථා වලින් 95% ක්ම ක්‍රෝන් ජොබ් එක බලාපොරොත්තු වූ පරිදි ක්‍රියාත්මක නොවන නිසා.

මේ මගුල වැඩ මම එය විධාන රේඛාවේ ධාවනය කරන විට හොඳින් ක්‍රියා කරයි, නමුත් මම එය ක්‍රොන්ටැබ් හි ධාවනය කරන විට අසාර්ථක වේ.

එය හේතු දෙකක්:

  • ක්‍රොන් රැකියා අන්තර්ක්‍රියාකාරී නොවේ.
  • විධාන රේඛා ස්ක්‍රිප්ට් මෙන් නොව, ක්‍රෝන් ජොබ් වලට ෂෙල් පරිසරය උරුම නොවේ.

පරිසරය අන්තර්ක්‍රියාකාරී කවචයෙන් උරුම වන බැවින් සාමාන්‍යයෙන් ෂෙල් ස්ක්‍රිප්ට් අන්තර්ක්‍රියාකාරී නොවන බව ඔබ නොදකිනු ඇත. මෙයින් අදහස් කරන්නේ සෑම දෙයක්ම බවයි PATH и alias ඔබ බලාපොරොත්තු වන පරිදි වින්‍යාස කර ඇත.

බොහෝ විට නිශ්චිතව සැකසීමට අවශ්ය වන්නේ එබැවිනි PATH මෙහි වැනි ක්‍රෝන් කාර්යයක් සඳහා:

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

ස්ක්‍රිප්ට් එකිනෙක ඇමතීම

තවත් පොදු ගැටළුවක් වන්නේ ස්ක්‍රිප්ට් වැරදීමකින් එකිනෙකා ඇමතීමට වින්‍යාස කර තිබීමයි. උදාහරණ වශයෙන්, /etc/profile යොමු කරයි ~/.bashrc.

මෙය සාමාන්‍යයෙන් සිදුවන්නේ යමෙකු යම් දෝෂයක් නිවැරදි කිරීමට උත්සාහ කළ විට සහ සෑම දෙයක්ම ක්‍රියාත්මක වන බවක් පෙනෙන්නට තිබූ විටය. අවාසනාවකට, ඔබට මෙම විවිධ ආකාරයේ සැසි වෙන් කිරීමට අවශ්ය වූ විට, නව ගැටළු මතු වේ.

සෑන්ඩ්බොක්ස් කළ ඩොකර් රූපය

කවචයක් ධාවනය කිරීම අත්හදා බැලීම සඳහා, මම ආරක්ෂිත පරිසරයක කවචයක් ධාවනය කිරීම නිදොස් කිරීමට භාවිතා කළ හැකි ඩොකර් රූපයක් නිර්මාණය කළෙමි.

දියත් කරන්න:

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

Dockerfile පිහිටා ඇත මෙහි.

බලහත්කාරයෙන් පුරනය වීමට සහ පිවිසුම් කවචයක් අනුකරණය කිරීමට:

$ bash --login

විචල්‍ය කට්ටලයක් පරීක්ෂා කිරීමට BASH_ENV:

$ env | grep BASH_ENV

දෝෂහරණය සඳහා crontab සෑම විනාඩියකටම සරල ස්ක්‍රිප්ට් එකක් ක්‍රියාත්මක වේ (දී /root/ascript):

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

මූලාශ්රය: www.habr.com

අදහස් එක් කරන්න