شیل اسکرپٹس میں Exec کمانڈ کا استعمال

Shyl Askrp S My Exec Kman Ka Ast Mal



یہ گائیڈ exec کمانڈ اور شیل اسکرپٹ میں اس کے استعمال کی وضاحت کرتا ہے۔

شرائط:

اس گائیڈ میں دکھائے گئے اقدامات کو انجام دینے کے لیے، آپ کو درج ذیل اجزاء کی ضرورت ہے:

  • ایک فعال لینکس سسٹم۔ متعلق مزید پڑھئے ورچوئل باکس کا استعمال کرتے ہوئے اوبنٹو 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/bash

pstree -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 اسکرپٹنگ کے بارے میں مزید جانیں۔ باش پروگرامنگ ذیلی زمرہ

مبارک کمپیوٹنگ!