سات غیر متوقع باش متغیرات

کے بارے میں نوٹوں کا سلسلہ جاری ہے۔ کم معلوم افعال bash، میں آپ کو سات متغیرات دکھاؤں گا جن کے بارے میں شاید آپ کو معلوم نہ ہو۔

1) PROMPT_COMMAND

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

درحقیقت، بہت سے پیچیدہ پرامپٹ ہیرا پھیری کرنے والے اس متغیر کو حکم پر عمل کرنے کے لیے استعمال کرتے ہیں تاکہ وہ معلومات اکٹھی کر سکیں جو پرامپٹ میں دکھائی جاتی ہے۔

اسے ایک نئے شیل میں چلانے کی کوشش کریں اور دیکھیں کہ سیشن کا کیا ہوتا ہے:

$ PROMPT_COMMAND='echo -n "writing the prompt at " && date'

2) HISTTIMEFORMAT

اگر آپ بھاگتے ہیں۔ history کنسول میں، آپ کو ان کمانڈز کی ایک فہرست ملے گی جو آپ کے اکاؤنٹ کے تحت پہلے چلائی گئی تھیں۔

$ HISTTIMEFORMAT='I ran this at: %d/%m/%y %T '

ایک بار جب یہ متغیر سیٹ ہوجاتا ہے، نئی اندراجات کمانڈ کے ساتھ وقت کو ریکارڈ کرتی ہیں، لہذا آؤٹ پٹ اس طرح نظر آئے گا:

1871 میں نے اسے اس وقت چلایا: 01/05/19 13:38:07 cat /etc/resolv.conf 1872 میں نے اسے اس وقت چلایا: 01/05/19 13:38:19 curl bbc.co.uk 1873 میں نے اسے چلایا : 01/05/19 13:38:41 sudo vi /etc/resolv.conf 1874 میں نے اسے اس وقت چلایا: 01/05/19 13:39:18 curl -vvv bbc.co.uk 1876 میں نے اسے چلایا: 01 /05/19 13:39:25 sudo su -

فارمیٹنگ حروف سے مماثل ہے۔ man date.

3) CDPATH

کمانڈ لائن پر وقت بچانے کے لیے، آپ اس متغیر کو ڈائرکٹریز کو اتنی ہی آسانی سے تبدیل کرنے کے لیے استعمال کر سکتے ہیں جیسے آپ کمانڈ جاری کرتے ہیں۔

کی طرح PATHمتغیر CDPATH راستوں کی بڑی آنت سے الگ کردہ فہرست ہے۔ جب آپ کمانڈ چلاتے ہیں۔ cd متعلقہ راستے کے ساتھ (یعنی کوئی لیڈنگ سلیش نہیں)، بطور ڈیفالٹ شیل آپ کے مقامی فولڈر میں مماثل ناموں کے لیے نظر آتا ہے۔ CDPATH آپ جس ڈائرکٹری میں جانا چاہتے ہیں اس کے لیے آپ نے دیے ہوئے راستوں میں تلاش کریں گے۔

اگر آپ انسٹال کرتے ہیں۔ CDPATH اس طرح سے:

$ CDPATH=/:/lib

اور پھر درج کریں:

$ cd /home
$ cd tmp

پھر آپ ہمیشہ ختم ہوجائیں گے۔ /tmp اس بات سے کوئی فرق نہیں پڑتا ہے کہ آپ کہاں ہیں.

تاہم، محتاط رہیں، کیونکہ اگر آپ فہرست میں مقامی کی وضاحت نہیں کرتے ہیں (.) فولڈر، پھر آپ کوئی دوسرا فولڈر نہیں بنا سکیں گے۔ tmp اور ہمیشہ کی طرح اس پر جائیں:

$ cd /home
$ mkdir tmp
$ cd tmp
$ pwd
/tmp

افوہ!

یہ اس الجھن کے مترادف ہے جب میں نے محسوس کیا کہ مقامی فولڈر زیادہ مانوس متغیر میں شامل نہیں ہے۔ PATH... لیکن آپ کو اسے اپنے PATH متغیر میں کرنا ہوگا کیونکہ آپ کو کچھ ڈاؤن لوڈ کردہ کوڈ سے جعلی کمانڈ چلانے کے لیے دھوکہ دیا جا سکتا ہے۔

میرا نقطہ آغاز کے ذریعہ ترتیب دیا گیا ہے:

CDPATH=.:/space:/etc:/var/lib:/usr/share:/opt

4) SHLVL

کیا آپ نے کبھی سوچا ہے، ٹائپنگ؟ exit کیا یہ آپ کو آپ کے موجودہ باش شیل سے باہر کسی اور "والدین" شیل میں لے جائے گا، یا یہ کنسول ونڈو کو مکمل طور پر بند کر دے گا؟

یہ متغیر اس بات پر نظر رکھتا ہے کہ آپ باش شیل میں کتنے گہرے اندر ہیں۔ اگر آپ نیا ٹرمینل بناتے ہیں، تو اسے 1 پر سیٹ کیا جاتا ہے:

$ echo $SHLVL
1

پھر، اگر آپ ایک اور شیل عمل شروع کرتے ہیں، تو تعداد بڑھ جاتی ہے:

$ bash
$ echo $SHLVL
2

یہ اسکرپٹس میں بہت کارآمد ثابت ہو سکتا ہے جہاں آپ کو یقین نہیں ہے کہ باہر نکلنا ہے یا نہیں، یا اس بات کا سراغ لگانا کہ آپ کہاں گھونسلے ہیں۔

5) LINENO

متغیر موجودہ حالت کا تجزیہ کرنے اور ڈیبگ کرنے کے لیے بھی مفید ہے۔ LINENO، جو سیشن میں اب تک کی گئی کمانڈز کی تعداد کی اطلاع دیتا ہے:

$ bash
$ echo $LINENO
1
$ echo $LINENO
2

اسکرپٹ کو ڈیبگ کرتے وقت یہ اکثر استعمال ہوتا ہے۔ جیسے لائنیں ڈالنا echo DEBUG:$LINENO، آپ جلدی سے تعین کر سکتے ہیں کہ آپ اسکرپٹ میں کہاں ہیں (یا نہیں)۔

6) REPLY

اگر، میری طرح، آپ عام طور پر اس طرح کوڈ لکھتے ہیں:

$ read input
echo do something with $input

یہ حیرت کی بات ہے کہ آپ کو متغیر بنانے کے بارے میں بالکل بھی فکر کرنے کی ضرورت نہیں ہے:

$ read
echo do something with $REPLY

یہ وہی کام کرتا ہے۔

7) TMOUT

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

اگر سیکنڈوں کی ایک مقررہ تعداد کے لیے کچھ بھی داخل نہیں کیا جاتا ہے، تو شیل باہر نکل جاتا ہے۔

یعنی یہ ایک متبادل ہے۔ sleep 1 && exit:

$ TMOUT=1

ماخذ: www.habr.com

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