تفصیل سے Bash چل رہا ہے۔

اگر آپ کو یہ صفحہ تلاش میں ملا ہے تو، آپ شاید چلانے والے bash کے ساتھ کچھ مسئلہ حل کرنے کی کوشش کر رہے ہیں۔

شاید آپ کا باش ماحول ماحول کے متغیر کو ترتیب نہیں دے رہا ہے اور آپ کو سمجھ نہیں آرہی ہے کہ کیوں۔ ہوسکتا ہے کہ آپ نے مختلف باش بوٹ فائلوں یا پروفائلز یا تمام فائلوں میں بے ترتیب طور پر کچھ پھنس دیا ہو جب تک کہ یہ کام نہ کرے۔

کسی بھی صورت میں، اس نوٹ کا نقطہ یہ ہے کہ باش شروع کرنے کے طریقہ کار کو جتنا ممکن ہو سکے ترتیب دیا جائے تاکہ آپ مسائل سے نمٹ سکیں۔

ڈایاگرام

یہ فلو چارٹ bash چلاتے وقت تمام عمل کا خلاصہ کرتا ہے۔

تفصیل سے Bash چل رہا ہے۔

اب آئیے ہر ایک حصے پر گہری نظر ڈالیں۔

لاگ ان شیل؟

پہلے آپ کو یہ منتخب کرنے کی ضرورت ہے کہ آپ لاگ ان شیل میں ہیں یا نہیں۔

لاگ ان شیل پہلا شیل ہے جسے آپ داخل کرتے ہیں جب آپ انٹرایکٹو سیشن کے لیے لاگ ان ہوتے ہیں۔ لاگ ان شیل کو صارف نام اور پاس ورڈ کی ضرورت نہیں ہے۔ آپ ایک جھنڈا شامل کرکے لاگ ان شیل کو شروع کرنے پر مجبور کر سکتے ہیں۔ --login جب بلایا جاتا ہے bashمثال کے طور پر:

bash -- لاگ ان

لاگ ان شیل بنیادی ماحول کو ترتیب دیتا ہے جب آپ پہلی بار باش شیل شروع کرتے ہیں۔

انٹرایکٹو؟

پھر آپ طے کرتے ہیں کہ شیل انٹرایکٹو ہے یا نہیں۔

یہ متغیر کی موجودگی کی طرف سے چیک کیا جا سکتا ہے PS1 (یہ کمانڈ ان پٹ فنکشن کو انسٹال کرتا ہے):

اگر [ "${PS1-}" ]؛ پھر ایکو انٹرایکٹو اور ایکو نان انٹرایکٹو فائی

یا دیکھیں کہ آپشن سیٹ ہے۔ -i، ایک خاص ہائفن متغیر کا استعمال کرتے ہوئے - bash میں، مثال کے طور پر:

$echo$-

اگر آؤٹ پٹ میں کوئی علامت ہے۔ i، پھر شیل انٹرایکٹو ہے۔

لاگ ان شیل میں؟

اگر آپ لاگ ان شیل میں ہیں، تو bash فائل کو تلاش کرتا ہے۔ /etc/profile اور اگر یہ موجود ہے تو چلتا ہے۔

پھر درج ذیل ترتیب میں ان تینوں فائلوں میں سے کسی کو تلاش کریں:

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

جب اسے ایک مل جاتا ہے، تو وہ اسے شروع کر دیتا ہے اور دوسروں کو چھوڑ دیتا ہے۔

ایک انٹرایکٹو شیل میں؟

اگر آپ غیر لاگ ان شیل میں ہیں، تو یہ فرض کیا جاتا ہے کہ آپ پہلے ہی لاگ ان شیل میں ہیں، ماحول ترتیب دیا گیا ہے اور وراثت میں ملے گا۔

اس صورت میں، مندرجہ ذیل دو فائلوں کو ترتیب سے عمل میں لایا جاتا ہے، اگر وہ موجود ہیں:

/etc/bash.bashrc ~/.bashrc

کوئی آپشن نہیں؟

اگر آپ لاگ ان شیل یا انٹرایکٹو شیل میں نہیں ہیں، تو آپ کا ماحول واقعی خالی ہوگا۔ یہ بہت زیادہ الجھن کا باعث بنتا ہے (کرون جابز کے بارے میں نیچے دیکھیں)۔

اس صورت میں bash متغیر کو دیکھتا ہے۔ BASH_ENV آپ کا ماحول اور وہاں بیان کردہ متعلقہ فائل بناتا ہے۔

عام مشکلات اور انگوٹھے کے اصول

کرون ملازمتیں

95% وقت میں جب میں بیش اسٹارٹ اپ کو ڈیبگ کرتا ہوں اس کی وجہ یہ ہے کہ کرون جاب توقع کے مطابق نہیں چل رہا ہے۔

یہ لعنتی کام جب میں اسے کمانڈ لائن پر چلاتا ہوں تو ٹھیک کام کرتا ہے، لیکن جب میں اسے کرونٹاب میں چلاتا ہوں تو ناکام ہوجاتا ہے۔.

یہاں دو وجوہات:

  • کرون جابز انٹرایکٹو نہیں ہیں۔
  • کمانڈ لائن اسکرپٹس کے برعکس، کرون جابز شیل ماحول کی وارث نہیں ہوتی ہیں۔

عام طور پر آپ کو اس بات کی پرواہ نہیں ہوگی کہ شیل اسکرپٹ انٹرایکٹو نہیں ہے کیونکہ ماحول انٹرایکٹو شیل سے وراثت میں ملتا ہے۔ اس کا مطلب ہے کہ سب کچھ PATH и alias آپ کی توقع کے مطابق ترتیب دیا گیا ہے۔

یہی وجہ ہے کہ اکثر ایک مخصوص سیٹ کرنا ضروری ہوتا ہے۔ PATH یہاں جیسے کرون کام کے لئے:

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

اسکرپٹ ایک دوسرے کو پکارتے ہیں۔

ایک اور عام مسئلہ یہ ہے کہ جب اسکرپٹس کو غلطی سے ایک دوسرے کو کال کرنے کے لیے ترتیب دیا جاتا ہے۔ مثال کے طور پر، /etc/profile سے مراد ~/.bashrc.

یہ عام طور پر اس وقت ہوتا ہے جب کسی نے غلطی کو ٹھیک کرنے کی کوشش کی اور ایسا لگتا ہے کہ سب کچھ کام کر رہا ہے۔ بدقسمتی سے، جب آپ کو ان مختلف قسم کے سیشنز کو الگ کرنے کی ضرورت ہوتی ہے، تو نئے مسائل پیدا ہوتے ہیں۔

سینڈ باکسڈ ڈوکر کی تصویر

شیل چلانے کے ساتھ تجربہ کرنے کے لیے، میں نے ایک ڈوکر امیج بنائی جس کا استعمال ایک محفوظ ماحول میں شیل چلانے کو ڈیبگ کرنے کے لیے کیا جا سکتا ہے۔

لانچ:

$ 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

ماخذ: www.habr.com

نیا تبصرہ شامل کریں