Bash майда-чүйдөсүнө чейин иштеп жатат

Эгер сиз бул баракты издөөдө тапсаңыз, анда сиз bash иштетүү менен кандайдыр бир көйгөйдү чечүүгө аракет кылып жатасыз.

Балким, сиздин bash чөйрөңүз чөйрө өзгөрмөсүн орнотпой жаткандыр жана сиз эмне үчүн түшүнбөйсүз. Сиз бир нерсени ар кандай bash жүктөө файлдарына же профилдерине же бардык файлдарга туш келди, ал иштегенге чейин тыгып алган болушуңуз мүмкүн.

Кандай болгон күндө да, бул эскертүүнүн мааниси - көйгөйлөрдү чечүү үчүн, bash баштоо процедурасын мүмкүн болушунча жөнөкөй кылып түзүү.

Диаграмма

Бул схема bash иштеткенде бардык процесстерди жалпылайт.

Bash майда-чүйдөсүнө чейин иштеп жатат

Эми ар бир бөлүгүн кененирээк карап чыгалы.

Login Shell?

Адегенде сиз кирүү кабыкчасында экениңизди же жок экениңизди тандап алышыңыз керек.

Кирүү кабыкчасы интерактивдүү сессияга киргениңизде биринчи кирген кабык. Кирүү кабыкчасы колдонуучунун атын жана паролду талап кылбайт. Сиз кирүү кабыкчасын желек кошуу менен баштоого мажбурлай аласыз --login чакырганда bashМисалы:

bash --логин

Кирүү кабыгы сиз bash кабыгын биринчи баштаганда базалык чөйрөнү орнотот.

Интерактивдүү?

Андан кийин сиз кабык интерактивдүү же жокпу, аныктайсыз.

Бул өзгөрмөнүн катышуусу менен текшерилиши мүмкүн PS1 (ал буйрук киргизүү функциясын орнотот):

if [ "${PS1-}" ]; анда echo interactive other echo non-interactive fi

Же параметр коюлганын көрүңүз -i, атайын дефис өзгөрмөсүн колдонуу - bash менен, мисалы:

$echo$-

Эгерде чыгууда белги бар болсо i, анда кабык интерактивдүү болот.

Кирүү кабыкчасындабы?

Эгер сиз кирүү кабыкчасында болсоңуз, анда bash файлды издейт /etc/profile жана ал бар болсо иштейт.

Андан кийин бул үч файлдын каалаганын төмөнкү тартипте издейт:

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

Бирөөнү тапканда аны баштап, калгандарын өткөрүп жиберет.

Интерактивдүү кабыктабы?

Эгер сиз кирүү эмес кабыкта болсоңуз, анда сиз буга чейин кирүү кабыкчасында болгонсуз деп болжолдонот, чөйрө конфигурацияланган жана мураска калат.

Бул учурда, төмөнкү эки файл, эгерде алар бар болсо, ирети менен аткарылат:

/etc/bash.bashrc ~/.bashrc

Вариант жокпу?

Эгер сиз кирүү кабыкчасында же интерактивдүү кабыкта болбосоңуз, анда сиздин чөйрөңүз чындап эле бош болот. Бул көп баш аламандыктарды жаратат (cron жумуштары жөнүндө төмөндө караңыз).

Бул учурда bash өзгөрмө карайт BASH_ENV чөйрөңүздү түзөт жана ошол жерде көрсөтүлгөн тиешелүү файлды түзөт.

Жалпы кыйынчылыктар жана эрежелер

cron жумуштары

Убакыттын 95% мен bash стартаптын мүчүлүштүктөрүн оңдоо, анткени cron жумушу күтүлгөндөй иштебей жатат.

Бул каргыш милдет мен аны буйрук сабында иштеткенде жакшы иштейт, бирок crontabда иштеткенде иштебей калат.

бул эки себеп:

  • Cron жумуштары интерактивдүү эмес.
  • Буйрук сап скрипттеринен айырмаланып, cron жумуштары кабык чөйрөсүн мурастабайт.

Адатта, сиз кабык скриптинин интерактивдүү эмес экенин байкабайсыз же көңүл бурбайсыз, анткени чөйрө интерактивдүү кабыктан мурастап калат. Бул бардыгын билдирет PATH и alias сиз күткөндөй конфигурацияланган.

Бул көп учурда конкреттүү белгилөө үчүн зарыл болуп саналат PATH бул жердегидей cron тапшырмасы үчүн:

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

Бири-бирин чакырган сценарийлер

Дагы бир кеңири таралган көйгөй - скрипттердин бири-бирине чалуу үчүн жаңылыш конфигурацияланышы. Мисалы, /etc/profile билдирет ~/.bashrc.

Бул, адатта, кимдир бирөө кандайдыр бир катаны оңдоого аракет кылганда жана баары иштеп жатканда пайда болот. Тилекке каршы, сиз сессиялардын бул ар кандай түрлөрүн бөлүп керек болгондо, жаңы көйгөйлөр пайда болот.

Sandboxed Docker сүрөтү

Кабакты иштетүү боюнча эксперимент жүргүзүү үчүн мен Docker сүрөтүн түздүм, аны коопсуз чөйрөдө кабыкты иштетүү үчүн колдонсо болот.

Ишке киргизүү:

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

Dockerfile жайгашкан бул жерде.

Кирүүнү күчтөндүрүү жана кирүү кабыкчасын имитациялоо үчүн:

$ bash --login

Өзгөрмөлөрдүн топтомун сыноо үчүн BASH_ENV:

$ env | grep BASH_ENV

Мүчүлүштүктөрдү оңдоо үчүн crontab жөнөкөй скрипт ар бир мүнөт аткарылат (in /root/ascript):

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

Source: www.habr.com

Комментарий кошуу