بش میں stdin ، stderr اور stdout کیا ہیں؟

What Are Stdin Stderr



جب بھی ٹرمینل میں کوئی کمانڈ چل رہی ہو ، stdin ، stderr ، اور stdout تین ڈیٹا اسٹریمز ہیں جو bash بناتے ہیں۔ اگر آپ کمانڈ لائن سے واقف ہیں ، تو آپ پہلے ہی ان خصوصیات سے فائدہ اٹھا چکے ہوں گے۔ بنیادی طور پر ، وہ ایک کمانڈ سے دوسری کمانڈ میں ڈیٹا پائپنگ/ری ڈائریکٹ کرنے کی اجازت دیتے ہیں۔

آئیے چیک کریں کہ کیسے۔ stdin ، stderr ، اور stdout کام کرتا ہے اور آپ انہیں کیسے استعمال کرسکتے ہیں۔







stdin ، stdout اور stderr

کمپیوٹنگ میں ، اسٹریم کی اصطلاح سے مراد وہ چیز ہے جو ڈیٹا منتقل کر سکتی ہے۔ یہاں ، تینوں دھارے متن کے بطور ڈیٹا لے جاتے ہیں۔



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



آئیے خصوصی اسٹریمز کی فوری خرابی کرتے ہیں۔





  • stdin: معیاری ان پٹ کے لیے کھڑا ہے۔ یہ متن کو بطور ان پٹ لیتا ہے۔
  • stdout: معیاری پیداوار کے لیے کھڑا ہے۔ کمانڈ کا ٹیکسٹ آؤٹ پٹ سٹڈ آؤٹ اسٹریم میں محفوظ ہے۔
  • stderr: معیاری غلطی کے لیے کھڑا ہے۔ جب بھی کسی کمانڈ کو غلطی کا سامنا کرنا پڑتا ہے ، غلطی کا پیغام اس اسٹریم میں محفوظ ہو جاتا ہے۔

لینکس میں ، تقریبا تمام اسٹریمز کے ساتھ ایسا سلوک کیا جاتا ہے جیسے وہ فائلیں ہوں۔ جس طرح آپ فائل پڑھ/لکھ سکتے ہیں اسی طرح آپ ان اسٹریمز سے ڈیٹا پڑھ/لکھ سکتے ہیں۔

کسی بھی فائل تک رسائی حاصل کرنے کا ایک آسان طریقہ اس سے وابستہ منفرد فائل ڈسریکٹر نمبر کا استعمال ہے۔ ان ندیوں کے معاملے میں ، ان میں سے ہر ایک کو مخصوص اقدار تفویض کی گئی ہیں۔



  • 0: stdin
  • 1: stdout
  • 2: stderr

stdin ، stdout ، اور stderr عمل میں۔

آئیے عمل کے ذریعے ان دھاروں کے بارے میں مزید معلومات حاصل کرکے شروع کریں ، ہم stdin سے شروع کریں گے۔

مندرجہ ذیل کمانڈ چلائیں۔

$پڑھیں

کمانڈ کو کی بورڈ سے ان پٹ کی ضرورت ہوگی۔ یہاں ، پڑھنے کا آلہ stdin سے ان پٹ حاصل کر رہا ہے۔ اب آئیے stdout کو دیکھیں۔

پہلے کمانڈ چلائیں۔

$ایل ایس -

یہاں ، ls کمانڈ موجودہ ڈائرکٹری میں فائلوں کو درج کرتی ہے۔ فہرست بھیجی جاتی ہے۔ stdout اور ٹرمینل اسے پرنٹ کرتا ہے۔ آئیے اب سٹڈرر چیک کریں۔

غلطی کے مختلف طریقے ہیں۔ اس مثال کے لیے ، ایک غلط دلیل بھیجنا غلطی کا نتیجہ ہوگا۔

$ایل ایس -کچھ بھی

یہاں ، کسی بھی نام کی فائل نہیں ہے۔ اسی لیے پیغام ls return کو بھیجا جاتا ہے۔ stderr .

پائپنگ

یہ ایک عام تکنیک ہے جو stdin اور stdout سٹریمز سے بھرپور فائدہ اٹھاتی ہے۔ آئیے ایک مثال کے ساتھ اس کی وضاحت کرتے ہیں۔

$باہر پھینک دیا 'ہیلو ورلڈ' | گرفتہیلو

یہاں ، | نشان پائپنگ کے لیے ذمہ دار ہے۔ آؤٹ پٹ۔ باہر پھینک دیا پیدا کرتا ہے میں لکھا ہے stdout ندی. پھر ، پائپنگ stdout کے مواد کو grep کمانڈ کے لیے stdin پر ری ڈائریکٹ کرتی ہے۔ اس طرح گریپ جانتا ہے کہ کس مواد کو آپریشن کرنا ہے۔

اگر آپ stderr اور stdout دونوں کو اگلی کمانڈ میں پائپ کرنا چاہتے ہیں تو پھر | & اس کے بجائے استعمال کریں۔

$باہر پھینک دیاسلام دنیا| & کیٹ

$کچھ بھی| & کیٹ

اسٹریمز کو ری ڈائریکٹ کرنا۔

اب ہم جانتے ہیں کہ یہ دھارے کیسے کام کرتے ہیں ، آئیے ایک نظر ڈالتے ہیں کہ آپ انہیں کس طرح ری ڈائریکٹ کرسکتے ہیں۔ پائپنگ ری ڈائریکشن کی ایک شکل ہے۔ تاہم ، اس میں صرف stdin اور stdout شامل ہے۔ بش تینوں دھاروں پر مخصوص کنٹرول کی اجازت دیتا ہے۔

stdout مواد کو کسی فائل میں ری ڈائریکٹ کرنے کے لیے ،> زاویہ شامل کریں اس کے بعد ہدف فائل کا نام۔

$باہر پھینک دیاسلام دنیا>hello.txt

یہاں ، ایکو کمانڈ کا آؤٹ پٹ hello.txt فائل میں محفوظ ہو جائے گا۔

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

$باہر پھینک دیا 'ہیلو ورلڈ' >>hello.txt

stdin کا ​​مقصد ان پٹ کے ساتھ کام کرنا ہے۔ یہ بھی ری ڈائریکٹ کیا جا سکتا ہے. مثال کے طور پر ، کی بورڈ سے ان پٹ ٹائپ کرنے کے بجائے اسے فائل سے لوڈ کیا جا سکتا ہے۔

اس کمانڈ میں ، cat براہ راست hello.txt فائل سے اپنا ان پٹ لے گی۔

$کیٹ <hello.txt

آئیے ایک مختلف مثال کے ساتھ ری ڈائریکشن چیک کریں۔ اس بار ، اس میں ایک ازگر اسکرپٹ شامل ہوگا۔

$# pyin.py
$ نام= ان پٹ('نام درج کریںn')
$ای میل = ان پٹ('ای میل درج کریں۔n')
$پرنٹ کریں('آپ کا نام ہے٪ s اور ای میل ہے٪ s'٪(نام، ای میل))

اسکرپٹ کا ان پٹ hello.txt پر واقع ہے۔

$کیٹhello.txt

آئیے فائل کو بطور اسکرپٹ بھیجیں۔

$ python3 pyin.py <ہیلو.TXT

دلچسپ بات یہ ہے کہ آپ دونوں کو ری ڈائریکٹ کر سکتے ہیں۔ stdin اور stdout اسی کمانڈ لائن میں یہاں ، مندرجہ ذیل کمانڈ بطور hello.txt استعمال کرے گی۔ stdin اور بھیجیں stdout ایک فائل کے کمانڈ کا۔

$ python3 pyin.py <ہیلو.TXT >پیداوارTXT

stderr کو ری ڈائریکٹ کرنا stdout کی طرح ہے۔ تاہم ، آپ کو stderr کی نشاندہی کے لیے تفصیل ID 2 کا ذکر کرنے کی ضرورت ہے۔ بصورت دیگر ، یہ صرف stdout استعمال کرے گا۔

یہاں ، میں کے مواد کو ری ڈائریکٹ کروں گا۔ stderr ایک ٹیکسٹ فائل میں

$کچھ بھی>error.txt

Stdout اور Stderr کو ری ڈائریکٹ کرنا۔

ہاں ، ان دونوں کو بیک وقت ری ڈائریکٹ کرنا ممکن ہے۔ آپ کو صرف ری ڈائریکشن سے پہلے تفصیل ID 1 اور 2 کا ذکر کرنا ہے۔

$باہر پھینک دیاسلام دنیا>output.log>debug.log

حتمی خیالات۔

stdin ، stdout ، اور stderr ڈیفالٹ طور پر بش کی پیشکش کی شاندار خصوصیات ہیں۔ اگر آپ بش سکرپٹنگ میں ہیں تو ، ان کا استعمال مشکل حالات میں ناقابل یقین حد تک مفید ثابت ہوسکتا ہے۔

بش سکرپٹنگ کے بارے میں مزید جاننا چاہتے ہیں؟ آئیے اس کے ساتھ شروع کریں۔ بیش سکرپٹنگ کے لیے ابتدائی رہنما۔ !

لطف اٹھائیں!