إذا وجدت هذه الصفحة في عملية بحث ، فمن المحتمل أنك تحاول حل بعض المشكلات في تشغيل bash.
من الممكن أن لا تقوم bash البيئة الخاصة بك بتعيين متغير بيئة ولا تفهم السبب. ربما تكون قد قمت بحشو شيء ما في ملفات التمهيد bash المختلفة أو في ملفات التعريف ، أو في جميع الملفات بشكل عشوائي حتى تعمل.
في أي حال ، فإن الهدف من هذه الملاحظة هو تحديد إجراء بدء تشغيل bash بسهولة قدر الإمكان حتى تتمكن من التعامل مع المشاكل.
خريطة
يلخص هذا المخطط الانسيابي جميع العمليات عند بدء تشغيل bash.

الآن دعونا نلقي نظرة فاحصة على كل جزء.
تسجيل الدخول شل؟
تحتاج أولاً إلى اختيار ما إذا كنت في غلاف تسجيل الدخول أم لا.
shell shell هو أول غلاف تقوم بإدخاله عند تسجيل الدخول لجلسة تفاعلية. قذيفة تسجيل الدخول لا تتطلب اسم مستخدم وكلمة مرور. يمكنك فرض بدء تشغيل قذيفة تسجيل الدخول عن طريق إضافة علامة
--login
عند استدعاء
bash
، على سبيل المثال:
باش - تسجيل الدخول
تقوم أداة تسجيل الدخول بتهيئة البيئة الأساسية عند تشغيل برنامج bash shell لأول مرة.
التفاعلية؟
ثم يمكنك تحديد ما إذا كانت الصدفة تفاعلية أم لا.
يمكن التحقق من ذلك من خلال وجود متغير
PS1
(يقوم بتعيين وظيفة إدخال الأوامر):
إذا ["$ {PS1-}"] ؛ ثم
صدى التفاعلية
آخر
صدى غير التفاعلية
فاي
أو معرفة ما إذا تم تعيين الخيار
-i
باستخدام متغير واصلة خاص في bash ، على سبيل المثال:
صدى $ -
إذا كان هناك
i
في الإخراج ، فإن الغلاف يكون تفاعلي.
في قذيفة تسجيل الدخول؟
إذا كنت في صدفة تسجيل الدخول ، فإن bash يبحث عن ملف
/etc/profile
ويعمل إذا كان موجودًا.
ثم يبحث عن أي من هذه الملفات الثلاثة بالترتيب التالي:
~ / .bash_profile
~ / .bash_login
~ /
عندما تعثر على واحدة ، فإنها تطلقها وتتخطى الآخرين.
في قذيفة التفاعلية؟
إذا كنت في صدفة تفاعلية بدون تسجيل دخول (shell غير تسجيل الدخول) ، فمن المفترض أنك قمت بالفعل بزيارة shell log ، تم تكوين البيئة وسيتم توارثها.
في هذه الحالة ، يتم تنفيذ الملفين التاليين بالترتيب ، إن وجد:
/etc/bash.bashrc
~ / .bashrc
ليس خيار واحد؟
إذا لم تكن في خانة تسجيل الدخول ولا في الغلاف التفاعلي ، فستكون البيئة الخاصة بك فارغة بالفعل. هذا يسبب الكثير من الالتباس (انظر وظائف cron أدناه).
في هذه الحالة ، ينظر bash إلى متغير
BASH_ENV
الخاص
BASH_ENV
وينفذ الملف المقابل المسرد هناك.
الصعوبات النموذجية وقواعد الإبهام
وظائف كرون
في 95 ٪ من الحالات ، لدي تصحيح إطلاق باش بسبب حقيقة أن وظيفة cron لا تعمل كما هو متوقع.تعمل هذه المهمة اللينة
بشكل جيد عندما أقوم بتشغيلها على سطر الأوامر ، لكنها تفشل عند بدء التشغيل في crontab .
هناك
سببان :
- وظائف Cron ليست تفاعلية.
- على عكس البرامج النصية لسطر الأوامر ، لا ترث وظائف cron بيئة shell.
عادةً لا تلاحظ أو تهتم بأن برنامج shell غير تفاعلي لأن البيئة ترث من الغلاف التفاعلي. هذا يعني أنه
alias
تكوين كل
PATH
alias
كما تتوقع.
لهذا السبب غالبًا ما تضطر إلى تعيين
PATH
محددة لمهمة cron ، كما يلي:
* * * * * PATH = $ {PATH}: / path / to / my / program / program myprogram
البرامج النصية التي تدعو بعضهم البعض
مشكلة شائعة أخرى هي عندما يتم تكوين البرامج النصية عن طريق الخطأ لاستدعاء بعضها البعض. على سبيل المثال ، يشير
/etc/profile
إلى
~/.bashrc
.
يحدث هذا عادة عندما يحاول شخص ما إصلاح نوع من الأخطاء ويبدو أن كل شيء يعمل. لسوء الحظ ، عندما تحتاج إلى فصل هذه الأنواع المختلفة من الجلسات ، تنشأ مشاكل جديدة.
رمل قفص الاتهام صورة
لتجربة بدء تشغيل shell ، قمت بإنشاء صورة Docker يمكنك استخدامها لتصحيح بدء تشغيل shell في بيئة آمنة.
تشغيل:
$ docker run -n bs -d imiell/bash_startup $ docker exec -ti bs bash
Dockerfile
هنا .
لفرض تسجيل الدخول ومحاكاة shell تسجيل الدخول:
$ bash --login
للتحقق من مجموعة المتغيرات
BASH_ENV
:
$ env | grep BASH_ENV
لتصحيح
crontab
سيتم تنفيذ برنامج نصي بسيط كل دقيقة (في
/root/ascript
):
$ crontab -l $ cat /var/log/script.log