اگر آپ کو یہ صفحہ تلاش میں ملا ہے تو، آپ شاید چلانے والے 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