మీరు శోధనలో ఈ పేజీని కనుగొన్నట్లయితే, మీరు బహుశా రన్నింగ్ బాష్తో కొంత సమస్యను పరిష్కరించడానికి ప్రయత్నిస్తున్నారు.
బహుశా మీ బాష్ ఎన్విరాన్మెంట్ ఎన్విరాన్మెంట్ వేరియబుల్ని సెట్ చేయడం లేదు మరియు ఎందుకు అని మీకు అర్థం కాలేదు. మీరు వివిధ బాష్ బూట్ ఫైల్లు లేదా ప్రొఫైల్లు లేదా అన్ని ఫైల్లలో యాదృచ్ఛికంగా పని చేసే వరకు ఏదైనా ఉంచి ఉండవచ్చు.
ఏదైనా సందర్భంలో, ఈ గమనిక యొక్క అంశం ఏమిటంటే, మీరు సమస్యలను ఎదుర్కోవటానికి వీలైనంత సరళంగా బాష్ను ప్రారంభించే విధానాన్ని రూపొందించడం.
రేఖాచిత్రం
ఈ ఫ్లోచార్ట్ బాష్ అమలు చేస్తున్నప్పుడు అన్ని ప్రక్రియలను సంగ్రహిస్తుంది.
ఇప్పుడు ప్రతి భాగాన్ని నిశితంగా పరిశీలిద్దాం.
షెల్ లాగిన్ చేయాలా?
ముందుగా మీరు లాగిన్ షెల్లో ఉన్నారా లేదా అని ఎంచుకోవాలి.
మీరు ఇంటరాక్టివ్ సెషన్ కోసం లాగిన్ చేసినప్పుడు లాగిన్ షెల్ మీరు నమోదు చేసే మొదటి షెల్. లాగిన్ షెల్కు వినియోగదారు పేరు మరియు పాస్వర్డ్ అవసరం లేదు. మీరు ఫ్లాగ్ను జోడించడం ద్వారా లాగిన్ షెల్ను ప్రారంభించడానికి బలవంతం చేయవచ్చు --login
పిలిచినప్పుడు bash
ఉదాహరణకు:
బాష్ --లాగిన్
మీరు మొదట బాష్ షెల్ను ప్రారంభించినప్పుడు లాగిన్ షెల్ బేస్ వాతావరణాన్ని సెట్ చేస్తుంది.
పరస్పర?
అప్పుడు మీరు షెల్ ఇంటరాక్టివ్గా ఉందో లేదో నిర్ణయిస్తారు.
వేరియబుల్ ఉనికి ద్వారా దీనిని తనిఖీ చేయవచ్చు PS1
(ఇది కమాండ్ ఇన్పుట్ ఫంక్షన్ను ఇన్స్టాల్ చేస్తుంది):
అయితే [ "${PS1-}" ]; అప్పుడు echo ఇంటరాక్టివ్ లేకపోతే echo నాన్-ఇంటరాక్టివ్ fi
లేదా ఆప్షన్ సెట్ చేయబడిందో లేదో చూడండి -i
, ప్రత్యేక హైఫన్ వేరియబుల్ ఉపయోగించి -
బాష్లో, ఉదాహరణకు:
$echo$-
అవుట్పుట్లో గుర్తు ఉంటే i
, అప్పుడు షెల్ ఇంటరాక్టివ్గా ఉంటుంది.
లాగిన్ షెల్లో?
మీరు లాగిన్ షెల్లో ఉన్నట్లయితే, బాష్ ఫైల్ కోసం చూస్తుంది /etc/profile
మరియు అది ఉనికిలో ఉంటే నడుస్తుంది.
ఈ క్రింది క్రమంలో ఈ మూడు ఫైల్లలో దేనినైనా శోధిస్తుంది:
~/.bash_profile ~/.bash_login ~/.profile
అది ఒకదాన్ని కనుగొన్నప్పుడు, అది దాన్ని ప్రారంభించి, ఇతరులను దాటవేస్తుంది.
ఇంటరాక్టివ్ షెల్లో ఉందా?
మీరు లాగిన్ కాని షెల్లో ఉన్నట్లయితే, మీరు ఇప్పటికే లాగిన్ షెల్లో ఉన్నారని, పర్యావరణం కాన్ఫిగర్ చేయబడిందని మరియు వారసత్వంగా పొందవచ్చని భావించబడుతుంది.
ఈ సందర్భంలో, కింది రెండు ఫైల్లు ఉనికిలో ఉంటే క్రమంలో అమలు చేయబడతాయి:
/etc/bash.bashrc ~/.bashrc
ఎంపిక లేదా?
మీరు లాగిన్ షెల్ లేదా ఇంటరాక్టివ్ షెల్లో లేకుంటే, మీ వాతావరణం నిజంగా ఖాళీగా ఉంటుంది. ఇది చాలా గందరగోళానికి కారణమవుతుంది (క్రన్ జాబ్స్ గురించి క్రింద చూడండి).
ఈ సందర్భంలో, బాష్ వేరియబుల్ వైపు చూస్తాడు BASH_ENV
మీ పర్యావరణం మరియు అక్కడ పేర్కొన్న సంబంధిత ఫైల్ను సృష్టిస్తుంది.
సాధారణ ఇబ్బందులు మరియు థంబ్ నియమాలు
క్రాన్ ఉద్యోగాలు
నేను డీబగ్ బాష్ స్టార్టప్లో 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
డాకర్ ఫైల్ ఉంది
బలవంతంగా లాగిన్ చేయడానికి మరియు లాగిన్ షెల్ను అనుకరించడానికి:
$ bash --login
వేరియబుల్స్ సమితిని పరీక్షించడానికి BASH_ENV
:
$ env | grep BASH_ENV
డీబగ్గింగ్ కోసం crontab
ప్రతి నిమిషం ఒక సాధారణ స్క్రిప్ట్ అమలు చేయబడుతుంది (లో /root/ascript
):
$ crontab -l
$ cat /var/log/script.log
మూలం: www.habr.com