شرائط:
اس گائیڈ میں دکھائے گئے اقدامات کو انجام دینے کے لیے، آپ کو درج ذیل اجزاء کی ضرورت ہے:
- ایک فعال لینکس سسٹم۔ متعلق مزید پڑھئے ورچوئل باکس کا استعمال کرتے ہوئے اوبنٹو VM ترتیب دینا .
- تک رسائی a سوڈو استحقاق کے ساتھ غیر جڑ صارف .
- ایک مناسب ٹیکسٹ ایڈیٹر۔ مثال کے طور پر: کیوں / نیو ویم ، نینو ، شاندار متن ، VSCodium وغیرہ
Exec کمانڈ
exec کمانڈ بذات خود ایک الگ ٹول نہیں ہے:
$ کونسا exec
بلکہ، یہ Bash شیل کی اندرونی کمانڈ ہے:
$ آدمی exec
جیسا کہ مین پیج کی تفصیل بتاتی ہے، اگر کوئی کمانڈ بیان کی جاتی ہے، تو exec اس کے ساتھ شیل کی جگہ لے لیتا ہے، کوئی اضافی عمل پیدا نہیں ہوتا ہے۔ مٹھی بھر اختیارات دستیاب ہیں جو exec کمانڈ کے رویے کو تبدیل کرتے ہیں۔
بنیادی استعمال
پہلے سے طے شدہ طور پر، جب بھی کوئی کمانڈ چلاتا ہے، Bash ایک سب شیل بناتا ہے اور کمانڈ کو فورک کرتا ہے۔
$ بازگشت $$ && سونا 999$ pstree -p
یہاں، ایکو کمانڈ موجودہ شیل کی PID پرنٹ کرتی ہے۔ Bash شیل (PID: 978) سلیپ کمانڈ (PID: 8369) کے ساتھ کام کرنے کے لیے ایک نئے چائلڈ پروسیس کو جنم دیتا ہے۔
اب، اگر ہم exec کا استعمال کرتے ہوئے سلیپ کمانڈ چلاتے ہیں تو کیا ہوگا؟
$ بازگشت $$ && exec سونا 999$ pstree -p
پیرنٹ باش کے عمل کو سلیپ کمانڈ سے بدل دیا گیا ہے۔ کامیاب عمل درآمد پر، یہ شیل پر واپس نہیں آتا ہے۔ اس کے بجائے، سیشن ختم کر دیا جاتا ہے.
صاف ستھرا ماحول
پہلے سے طے شدہ Bash کنفیگریشن ٹویکس اور ماحولیاتی متغیرات کے ایک گروپ کے ساتھ آتی ہے۔ بعض حالات میں (مثال کے طور پر ڈیبگنگ)، آپ اپنے اسکرپٹ/پروگرام کو صاف ستھرا ماحول میں چلانا چاہتے ہیں۔ exec کی مدد سے، ہم موجودہ کی جگہ کلین شیل مثال شروع کر سکتے ہیں۔
سب سے پہلے، ان تمام ماحولیاتی متغیرات کی فہرست بنانے کے لیے printenv کمانڈ استعمال کریں جو فی الحال کنفیگر ہیں:
$ printenv
اب، ایک صاف مثال شروع کرنے کے لئے exec کا استعمال کریں:
$ exec -c bash$ printenv
ایک مختلف شیل لانچ کرنا
Bash اور 'sh' کے علاوہ، کئی دوسرے شیل پروگرام دستیاب ہیں، جن میں سے ہر ایک اپنے منفرد فوائد کے ساتھ ہے۔ اگر کسی پروگرام/اسکرپٹ کو کسی مخصوص شیل کی ضرورت ہوتی ہے، تو آپ موجودہ باش شیل کو مطلوبہ سے تبدیل کرنے کے لیے exec استعمال کر سکتے ہیں۔
درج ذیل مثال میں، ہم Bash کو 'sh' سے تبدیل کرتے ہیں:
$ pstree -p$ exec ایسیچ
$ pstree -p
اسکرپٹ میں Exec کا استعمال
بنیادی باتیں ختم ہونے کے ساتھ، اب ہم اپنی شیل اسکرپٹس میں exec کا استعمال شروع کر سکتے ہیں۔
مثال 1: مختلف شیلوں کے ساتھ کام کرنا
درج ذیل اسکرپٹ کو دیکھیں:
#!/bin/bashبازگشت $SHELL
بازگشت 'echo zsh کامیابی سے لانچ ہوا' > zsh.sh
exec zsh zsh.sh
یہاں، پہلی echo کمانڈ موجودہ شیل کو پرنٹ کرتی ہے۔ پہلے سے طے شدہ طور پر، یہ Bash ہونا چاہیے۔ پھر، exec کمانڈ 'zsh.sh' اسکرپٹ کو چلانے کے لیے 'zsh' کو لانچ کرتی ہے۔
درج ذیل اسکرپٹ کو چلائیں:
$ . / test.sh
مثال 2: موجودہ عمل کو اوور رائیڈ کرنا
جب بھی کسی کمانڈ/پروگرام کو کال کرتے ہیں، Bash ایک نئے عمل کو جنم دیتا ہے۔ زیادہ تر حالات میں، یہ تشویش کی بات نہیں ہے۔ تاہم، جب بہت محدود وسائل (ایمبیڈڈ ہارڈویئر، مثال کے طور پر) والے سسٹم کے ساتھ کام کرتے ہوئے، میموری میں موجود عمل کو اوور رائیڈ کرنے کے لیے exec کا استعمال مدد کر سکتا ہے۔
درج ذیل اسکرپٹ کو دیکھیں:
#!/bin/bashpstree -p
exec pstree -p
بازگشت 'ہیلو دنیا'
یہاں، پہلی pstree کمانڈ عمل کے درخت کی اصل ترتیب کو ظاہر کرتی ہے۔ ایک بار exec کمانڈ پر عمل درآمد ہونے کے بعد، دوسری pstree کمانڈ چلتے ہوئے شیل کی جگہ لے لیتی ہے۔ آخری لائن پر ایکو کمانڈ پر عمل نہیں ہوا۔
درج ذیل اسکرپٹ کو چلائیں:
$ . / test.sh
چونکہ یہ اسکرپٹ کا ایک حصہ تھا، اس لیے ہم کامیاب عمل درآمد پر اصل شیل پر واپس آجاتے ہیں۔
چونکہ exec کمانڈ پیرنٹ شیل کو مختلف کمانڈ/پروگرام سے بدل دیتی ہے، اس کے بعد کوئی بھی کوڈ غلط ہو جاتا ہے۔ انہیں اپنے اسکرپٹ میں استعمال کرتے وقت محتاط رہیں۔
مثال 3: لاگنگ
باش شیل کسی بھی چلنے والے پروگرام/اسکرپٹ کو 3 منفرد فائل ڈسکرپٹرز پیش کرتا ہے۔
- STDOUT (1): معیاری آؤٹ پٹ، عام آؤٹ پٹ اسٹور کرتا ہے۔
- STDERR (2): معیاری خرابی، غلطی کے پیغامات محفوظ کرتی ہے۔
- STDIN (0): معیاری ان پٹ
exec کا استعمال کرتے ہوئے، ہم ان فائل ڈسکرپٹرز کو کسی دوسرے مقام پر بھیج سکتے ہیں، مثال کے طور پر: لاگ فائلز۔ یہ عام طور پر ڈیبگنگ اور لاگنگ میں مدد کرسکتا ہے۔
عام طور پر، اگر آپ STDOUT اور STDERR کو لاگ فائل میں ری ڈائریکٹ کرنا چاہتے ہیں، تو آپ ری ڈائریکٹ آپریٹر استعمال کرتے ہیں:
$ بازگشت $$ | ٹی test.log$ راہب 2 >& 1 | ٹی test.log
اس طریقہ کو ہر اس مقام پر ری ڈائریکشن کی ضرورت ہوتی ہے جس پر آپ لاگ کرنا چاہتے ہیں۔ اس مسئلے کو حل کرنے کے لیے، ہم شیل سیشن کے لیے مستقل ری ڈائریکٹ بنانے کے لیے exec کمانڈ استعمال کر سکتے ہیں۔ مندرجہ ذیل مثال کو چیک کریں:
#!/bin/bash> test.log
exec 1 >> test.log
exec 2 >& 1
بازگشت 'ہیلو دنیا'
غلط_حکم
یہاں، پہلی لائن ایک خالی لاگ فائل بناتی ہے۔ پہلی exec کمانڈ لاگ فائل میں STDOUT کی مستقل ری ڈائریکٹ قائم کرتی ہے۔ دوسری exec کمانڈ STDERR کو STDOUT پر بھیجتی ہے۔
اس سیٹ اپ کے ساتھ، تمام آؤٹ پٹ اور ایرر میسیجز لاگ فائل میں ڈال دیے جاتے ہیں:
$ / test.sh$ کیٹ test.log
اگر اسکرپٹ مسلسل لاگ اندراجات تیار کرتا ہے تو کیا ہوگا؟
#!/bin/bash> test.log
exec 1 >> test.log
exec 2 >& 1
جبکہ سچ
کیا
بازگشت $RANDOM
سونا 5
ہو گیا
یہاں، پہلے حصے میں، ہم اپنی لاگ فائل میں STDOUT اور STDERR کا مستقل ری ڈائریکٹ بناتے ہیں۔ لامحدود جبکہ لوپ ایکو کمانڈ کو چلاتا ہے جب تک کہ ہم اسے 'Ctrl + C' استعمال کرکے زبردستی بند نہ کر دیں۔ $RANDOM متغیر ایک خاص متغیر ہے جو ہر بار اس تک رسائی کے بعد ایک بے ترتیب سٹرنگ لوٹاتا ہے۔
اپ ڈیٹ کرنے والے لاگ انٹری کو چیک کرنے کے لیے، درج ذیل ٹیل کمانڈ کا استعمال کریں:
$ دم -f test.log
نوٹ کریں کہ یہ ری ڈائریکشن صرف شیل سیشن تک ہی رہتا ہے۔
مثال 4: فائل سے ان پٹ
اسی طرح جس طرح ہم نے ایک مستقل STDOUT اور STDERR ری ڈائریکٹ بنایا، ہم STDIN کے لیے بھی بنا سکتے ہیں۔ تاہم، چونکہ STDIN ان پٹ کے لیے استعمال ہوتا ہے، اس لیے عمل درآمد کچھ مختلف ہے۔
درج ذیل اسکرپٹ میں، ہم ایک فائل سے STDIN لیتے ہیں:
#!/bin/bashبازگشت 'گونج' ہیلو دنیا '' > ان پٹ
exec < ان پٹ
پڑھیں لائن 1
eval $line_1
یہاں، پہلی لائن میں، ہم ری ڈائریکشن کا استعمال کرتے ہوئے input_string فائل کا مواد تیار کرنے کے لیے echo کا استعمال کرتے ہیں۔ exec کمانڈ input_string کے مواد کو موجودہ شیل سیشن کے STDIN پر بھیجتی ہے۔ سٹرنگ کو پڑھنے کے بعد، ہم $line_1 کے مواد کو شیل کوڈ کے طور پر استعمال کرنے کے لیے eval کا استعمال کرتے ہیں۔
درج ذیل اسکرپٹ کو چلائیں:
$ . / test.sh
نتیجہ
ہم نے باش میں exec کمانڈ کے بارے میں بات کی۔ ہم نے اسے اسکرپٹ میں استعمال کرنے کے مختلف طریقے بھی دکھائے۔ ہم نے ایک سے زیادہ شیلز کے ساتھ کام کرنے، میموری کو موثر اسکرپٹس بنانے، اور فائل ڈسکرپٹرز کو ری ڈائریکٹ کرنے کے لیے exec کا استعمال کرتے ہوئے دکھایا۔
یہ صرف ایک چھوٹا سا حصہ ہے جو باش اسکرپٹنگ کا استعمال کرکے حاصل کیا جاسکتا ہے۔ سے Bash اسکرپٹنگ کے بارے میں مزید جانیں۔ باش پروگرامنگ ذیلی زمرہ
مبارک کمپیوٹنگ!