Покретање Басх-а у детаље

Ако сте пронашли ову страницу у претрази, вероватно покушавате да решите неки проблем са покретањем басх-а.

Можда ваше басх окружење не поставља променљиву окружења и не разумете зашто. Можда сте заглавили нешто у разне басх датотеке за покретање или профиле или све насумично све датотеке док није функционисало.

У сваком случају, поента ове белешке је да што једноставније изложи процедуру за покретање басх-а како бисте могли да се носите са проблемима.

Графикон

Овај дијаграм тока сумира све процесе када се покреће басх.

Покретање Басх-а у детаље

Сада погледајмо детаљније сваки део.

Логин Схелл?

Прво морате да изаберете да ли сте у љусци за пријаву или не.

Схелл за пријаву је прва љуска коју унесете када се пријавите за интерактивну сесију. Схелл за пријаву не захтева корисничко име и лозинку. Можете натерати љуску за пријаву да се покрене додавањем заставице --login приликом позивања bash, на пример:

басх --логин

Схелл за пријаву поставља основно окружење када први пут покренете басх схелл.

Интерацтиве?

Затим одређујете да ли је љуска интерактивна или не.

Ово се може проверити присуством променљиве PS1 (инсталира функцију уноса команде):

иф [ "${ПС1-}" ]; затим ехо интерактивно остало ехо неинтерактивно фи

Или погледајте да ли је опција подешена -i, користећи посебну променљиву цртице - у басх-у, на пример:

$ехо$-

Ако у излазу постоји симбол i, онда је шкољка интерактивна.

У љусци за пријаву?

Ако сте у љусци за пријављивање, басх тражи датотеку /etc/profile и ради ако постоји.

Затим тражи било коју од ове три датотеке у следећем редоследу:

~/.басх_профиле ~/.басх_логин ~/.профиле

Када нађе једног, покреће га и прескаче остале.

У интерактивној љусци?

Ако сте у љусци без пријаве, претпоставља се да сте већ били у љусци за пријаву, окружење је конфигурисано и биће наслеђено.

У овом случају, следеће две датотеке се извршавају по редоследу, ако постоје:

/етц/басх.басхрц ~/.басхрц

Нема опције?

Ако нисте ни у љусци за пријаву ни у интерактивној љусци, онда ће ваше окружење заиста бити празно. Ово изазива велику забуну (погледајте доле о пословима црон-а).

У овом случају басх гледа на променљиву BASH_ENV ваше окружење и креира одговарајућу датотеку која је тамо наведена.

Уобичајене потешкоће и правила палца

црон послови

95% времена отклањам грешке при покретању басх-а зато што црон посао не ради како се очекивало.

Овај проклети задатак ради добро када га покренем на командној линији, али не успева када га покренем у цронтаб-у.

Овде два разлога:

  • Црон послови нису интерактивни.
  • За разлику од скрипти командне линије, црон послови не наслеђују окружење љуске.

Обично нећете приметити нити ће вас занимати што схелл скрипта није интерактивна јер окружење наслеђује интерактивну љуску. То значи да све PATH и alias конфигурисан како бисте очекивали.

Због тога је често потребно поставити специфичан PATH за црон задатак као овде:

* * * * * ПАТХ=${ПАТХ}:/пута/до/мој/програм/фолдер мојпрограм

Скрипте које се међусобно позивају

Још један уобичајени проблем је када су скрипте грешком конфигурисане да се међусобно позивају. На пример, /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

Извор: ввв.хабр.цом

Додај коментар