رننگ بش تفصيل سان

جيڪڏھن توھان ھي صفحو ڳولھيو ٿا، توھان شايد ڪوشش ڪري رھيا آھيو ڪجھ مسئلو حل ڪرڻ جي بش سان.

شايد توهان جو بش ماحول ماحول جي متغير کي ترتيب نه ڏئي رهيو آهي ۽ توهان نٿا سمجهو ڇو. توهان شايد مختلف بيش بوٽ فائلن يا پروفائلز ۾ يا بي ترتيب تي سڀني فائلن ۾ ڪجهه پڪڙي ڇڏيو آهي جيستائين اهو ڪم ڪيو.

ڪنهن به صورت ۾، هن نوٽ جو نقطو اهو آهي ته بش شروع ڪرڻ جي طريقيڪار کي آسان طور تي ممڪن طور تي ترتيب ڏيو ته جيئن توهان مسئلن کي حل ڪري سگهو ٿا.

عڪس

هي فلو چارٽ سڀني عملن کي اختصار ڪري ٿو جڏهن بيش هلائي رهيو آهي.

رننگ بش تفصيل سان

هاڻي اچو ته هر هڪ حصو تي هڪ ويجهي نظر رکون.

لاگ ان شيل؟

پهرين توهان کي چونڊڻ جي ضرورت آهي ته توهان لاگ ان شيل ۾ آهيو يا نه.

لاگ ان شيل پهريون شيل آهي جيڪو توهان داخل ڪيو ٿا جڏهن توهان هڪ انٽرويو سيشن لاءِ لاگ ان ٿيو. لاگ ان شيل کي صارف نام ۽ پاسورڊ جي ضرورت ناهي. توھان زور ڪري سگھو ٿا لاگ ان شيل کي شروع ڪرڻ لاءِ جھنڊو شامل ڪندي --login جڏهن سڏيو وڃي ٿو bashمثال طور

bash -- لاگ ان

لاگ ان شيل بنيادي ماحول کي ترتيب ڏئي ٿو جڏهن توهان پهريون ڀيرو بش شيل شروع ڪيو.

انٽرويو؟

پوء توهان اهو طئي ڪيو ته ڇا شيل انٽرويو آهي يا نه.

اهو متغير جي موجودگي جي جانچ ڪري سگهجي ٿو PS1 (اهو ڪمانڊ ان پٽ فنڪشن کي انسٽال ڪري ٿو):

جيڪڏهن [ "${PS1-}"]؛ پوءِ echo interactive else echo non-interactive fi

يا ڏسو ته اختيار مقرر ٿيل آهي -i، هڪ خاص هائفن متغير استعمال ڪندي - bash ۾، مثال طور:

$echo$-

جيڪڏهن آئوٽ ۾ هڪ علامت آهي i، پوءِ شيل انٽرايڪٽو آهي.

لاگ ان شيل ۾؟

جيڪڏهن توهان لاگ ان شيل ۾ آهيو، پوء بش فائل کي ڳولي ٿو /etc/profile ۽ هلندو آهي جيڪڏهن اهو موجود آهي.

پوءِ ھيٺ ڏنل ترتيب ۾ انھن ٽن فائلن مان ڪنھن کي ڳولھيو:

~/.bash_profile ~/.bash_login ~/. پروفائل

جڏهن اهو هڪ ڳولي ٿو، اهو ان کي شروع ڪري ٿو ۽ ٻين کي ڇڏي ٿو.

هڪ انٽرويو شيل ۾؟

جيڪڏهن توهان هڪ غير لاگ ان شيل ۾ آهيو، اهو فرض ڪيو ويو آهي ته توهان اڳ ۾ ئي لاگ ان شيل ۾ آهيو، ماحول ترتيب ڏنو ويو آهي ۽ وارث ٿي ويندو.

انهي صورت ۾، هيٺيون ٻه فائلون ترتيب سان جاري آهن، جيڪڏهن اهي موجود آهن:

/etc/bash.bashrc ~/.bashrc

ڪو آپشن؟

جيڪڏهن توهان يا ته لاگ ان شيل يا هڪ انٽرايڪٽو شيل ۾ نه آهيو، ته پوء توهان جو ماحول بلڪل خالي هوندو. اهو تمام گهڻو مونجهارو پيدا ڪري ٿو (هيٺ ڏسو ڪرون نوڪريون بابت).

انهي حالت ۾ بش متغير کي ڏسڻ ۾ اچي ٿو BASH_ENV توهان جو ماحول ۽ ٺاهيل لاڳاپيل فائل اتي بيان ڪيل آهي.

عام مشڪلاتون ۽ انگن اکرن جا ضابطا

ڪرون نوڪريون

95٪ وقت جو آئون ڊيبگ بش اسٽارٽ اپ اهو آهي ڇاڪاڻ ته ڪرون نوڪري توقع جي مطابق نه هلي رهي آهي.

هي لعنتي ڪم ٺيڪ ڪم ڪري ٿو جڏهن آئون ان کي ڪمانڊ لائن تي هلائيندو آهيان، پر ناڪام ٿيندو آهي جڏهن آئون ان کي ڪرنٽاب ۾ هلائيندو آهيان.

اهو آهي ٻه سبب:

  • ڪرون نوڪريون انٽرايڪٽو نه آهن.
  • ڪمانڊ لائن اسڪرپٽ جي برعڪس، ڪرون نوڪريون شيل ماحول کي وارث نه ڪندا آهن.

عام طور تي توهان نوٽيس يا پرواه نه ڪندا ته شيل اسڪرپٽ انٽرايڪٽو نه آهي ڇو ته ماحول انٽرايڪٽو شيل مان ورثي ۾ ملي ٿو. هن جو مطلب اهو آهي ته سڀ ڪجهه PATH и alias ترتيب ڏنل جيئن توهان توقع ڪندا.

اهو ڇو ته اهو اڪثر ڪري هڪ مخصوص مقرر ڪرڻ ضروري آهي PATH هتي هڪ ڪرون ڪم لاءِ:

* * * * * PATH=${PATH}:/path/to/my/program/folder myprogram

اسڪرپٽ هڪ ٻئي کي سڏين ٿا

هڪ ٻيو عام مسئلو اهو آهي جڏهن اسڪرپٽ هڪ ٻئي کي سڏڻ لاءِ غلطي سان ترتيب ڏنل آهن. مثال طور، /etc/profile کي اپيل ڪري ٿو ~/.bashrc.

اهو عام طور تي ٿئي ٿو جڏهن ڪو ماڻهو ڪجهه غلطي کي درست ڪرڻ جي ڪوشش ڪئي ۽ هر شيء ڪم ڪرڻ لڳي. بدقسمتي سان، جڏهن توهان کي انهن مختلف قسمن جي سيشن کي الڳ ڪرڻ جي ضرورت آهي، نوان مسئلا پيدا ٿين ٿا.

Sandboxed Docker تصوير

شيل کي هلائڻ سان تجربو ڪرڻ لاءِ، مون هڪ ڊاڪر تصوير ٺاهي جيڪا محفوظ ماحول ۾ شيل کي هلائڻ کي ڊيبگ ڪرڻ لاءِ استعمال ڪري سگهجي ٿي.

لانچ:

$ 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

تبصرو شامل ڪريو