Ə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.
İ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
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