Bash-i ətraflı şəkildə işə salın

Əgər bu səhifəni axtarışda tapmısınızsa, yəqin ki, bash-ın işləməsi ilə bağlı problemi həll etməyə çalışırsınız.

Ola bilsin ki, sizin bash mühitiniz mühit dəyişənini təyin etmir və bunun səbəbini başa düşmürsünüz. Müxtəlif bash açılış fayllarında və ya profillərində və ya bütün fayllarda təsadüfi olaraq işləyənə qədər bir şey yapışdırmış ola bilərsiniz.

Hər halda, bu qeydin məqsədi problemlərlə məşğul ola bilməniz üçün bash-a başlamaq prosedurunu mümkün qədər sadə şəkildə tərtib etməkdir.

Diaqram

Bu axın sxemi bash işlədərkən bütün prosesləri ümumiləşdirir.

Bash-i ətraflı şəkildə işə salın

İndi hər bir hissəyə daha yaxından nəzər salaq.

Shell-ə ​​daxil olun?

Əvvəlcə giriş qabığında olub olmadığınızı seçməlisiniz.

Giriş qabığı interaktiv seans üçün daxil olduğunuz zaman daxil etdiyiniz ilk qabıqdır. Giriş qabığı istifadəçi adı və şifrə tələb etmir. Siz bayraq əlavə etməklə giriş qabığını başlamağa məcbur edə bilərsiniz --login çağıranda bash, məsələn:

bash - giriş

Giriş qabığı, bash qabığını ilk dəfə işə saldığınız zaman əsas mühiti qurur.

İnteraktiv?

Sonra qabığın interaktiv olub olmadığını müəyyənləşdirirsiniz.

Bu dəyişənin mövcudluğu ilə yoxlanıla bilər PS1 (bu, əmr daxiletmə funksiyasını quraşdırır):

əgər [ "${PS1-}" ]; sonra echo interaktiv başqa əks-səda interaktiv olmayan fi

Və ya seçimin təyin edilib-edilmədiyinə baxın -i, xüsusi defis dəyişənindən istifadə etməklə - bash-da, məsələn:

$echo$-

Çıxışda bir simvol varsa i, onda qabıq interaktivdir.

Giriş qabığında?

Əgər siz giriş qabığındasınızsa, o zaman bash faylı axtarır /etc/profile və əgər varsa çalışır.

Sonra bu üç fayldan hər hansı birini aşağıdakı ardıcıllıqla axtarır:

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

Birini tapanda onu işə salır və digərlərini atlayır.

İnteraktiv qabıqda?

Əgər siz giriş olmayan qabıqdasınızsa, güman edilir ki, siz artıq giriş qabığında olmusunuz, mühit konfiqurasiya olunub və miras alınacaq.

Bu halda, aşağıdakı iki fayl mövcuddursa, ardıcıllıqla yerinə yetirilir:

/etc/bash.bashrc ~/.bashrc

Seçim yoxdur?

Əgər siz giriş qabığında və ya interaktiv qabıqda deyilsinizsə, o zaman mühitiniz həqiqətən boş olacaq. Bu, çox qarışıqlığa səbəb olur (cron işləri haqqında aşağıya baxın).

Bu halda bash dəyişənə baxır BASH_ENV mühitinizi yaradır və orada göstərilən müvafiq faylı yaradır.

Ümumi Çətinliklər və Başparmak Qaydaları

cron işləri

Bash başlanğıcını debug etdiyim vaxtın 95%-i cron işinin gözlənildiyi kimi işləməməsidir.

Bu lənətə gəlmiş vəzifə əmr satırında işlətdiyim zaman yaxşı işləyir, lakin crontab-da işə saldığım zaman uğursuz olur.

Burada iki səbəb:

  • Cron işləri interaktiv deyil.
  • Komanda xətti skriptlərindən fərqli olaraq, cron işləri qabıq mühitini miras qoymur.

Bir qayda olaraq, bir qabıq skriptinin interaktiv olmadığını fərq etməyəcəksiniz və ya əhəmiyyət verməyəcəksiniz, çünki mühit interaktiv qabıqdan miras qalır. Bu o deməkdir ki, hər şey PATH и alias gözlədiyiniz kimi konfiqurasiya edilmişdir.

Buna görə də tez-tez xüsusi təyin etmək lazımdır PATH buradakı kimi bir cron tapşırığı üçün:

* * * * * PATH=${PATH}:/path/to/my/program/qovluq proqramım

Bir-birini çağıran skriptlər

Başqa bir ümumi problem, skriptlərin səhvən bir-birinə zəng etmək üçün konfiqurasiya edilməsidir. Misal üçün, /etc/profile müraciət edir ~/.bashrc.

Bu, adətən, kimsə hansısa səhvi düzəltməyə çalışdıqda və hər şey işlədiyi zaman baş verir. Təəssüf ki, bu müxtəlif növ sessiyaları ayırmaq lazım olduqda yeni problemlər yaranır.

Sandboxed Docker şəkli

Bir qabığın işlədilməsi ilə təcrübə etmək üçün mən təhlükəsiz mühitdə bir qabığın işlədilməsini sazlamaq üçün istifadə edilə bilən Docker şəkli yaratdım.

Başla:

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

Dockerfile yerləşir burada.

Girişi məcbur etmək və giriş qabığını simulyasiya etmək üçün:

$ bash --login

Dəyişənlər dəstini sınamaq üçün BASH_ENV:

$ env | grep BASH_ENV

Sazlama üçün crontab sadə bir skript hər dəqiqə yerinə yetiriləcək (in /root/ascript):

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

Mənbə: www.habr.com

Добавить комментарий