لینوکسی بشیم: نکات متفرقه در bash

خب حالا که خبره شدیم میخوام یه چند تا نکته بگم که دونستن اونها به درد بخوره. این نکات یه کم ممکنه جدا از هم به نظر بیان؛ چون نمی‌تونستم برای هر کدوم یک مطلب جدا بنویسم یه جا آوردمشون. مثل همیشه کسانی که میخوان در زمینه مدیریت سیستم‌های ‌لینوکسی کار کنن این مطلب رو بخونن. برنامه‌نویس‌هایی هم که میخوان تو محیط لینوکس کار کنن این چیزا به دردشون میخوره.

تو این مطلب فرض بر این هست که با شل و بش آشنایی دارین. لازمه مباحثی مثل اسکریپت نویسی و متغیرها در بش رو بدونین. میتونین قسمت‌های قبلی این دنباله رو مطالعه کنین.

اولین چیزی که میخوام راجع بهش بگم متغیرهای محیطی در بش هست. این‌ها هم متغیرهایی هستن که تو تمام بش‌هایی که باز می‌کنیم وجود دارن. با دستور env میشه همه‌شون رو در بش فعلی دید. مثلا متغیر HOME رو در بش ببینید:

این متغیر میگه که پوشه home من کجاس.

یا مثلا PS1 :

این متغیر یه کم عجیبه ظاهرش ولی همون عبارتی هست که موقع نوشتن دستور تو خط فرمان میاد. قوانین خاصی داره برای تعیین بعضی کلمات و رنگ‌ها. میتونید خودتون تغییرش بدین و نتیجه رو ببینین:

یکی دیگه از این متغیرها PATH هستش:

این متغیر میگه که بش برای اجرای دستورایی که میزنیم تو کدوم پوشه‌ها دنبالش بگرده. احتمالا دستوری مثل این رو دیدید که وقتی یه چیزی رو نصب میکنین میگن اجراش کنین:

export PATH=$PATH:/some-path

دستور export باعث میشه تمام بش‌هایی که بعد از این اجرا میشن این متغیر رو بشناسن. راجع بهش تو این مطلب صحبت می‌کنیم. با این کارتون مسیر جدید رو PATH اضافه می‌کنین تا تو اون هم بگرده دفعه بعد. میتونین تو home خودتون یه اسکریپت بنویسین و مسیر home رو به PATH اضافه کنین تا بتونین از هر جایی اون رو اجرا کنین و دیگه نیازی به گذاشتن /. هم نیست.

تعیین مقدار این متغیرها ثابت نیست. یعنی اگه PATH رو تغییر بدید و بش رو ببندید و دوباره باز کنید دیگه اون مقدار قبلی رو نداره. برای ثابت نگه داشتن این تغییرات اون‌ها رو توی فایلی می‌نویسیم که همیشه قبل از اجرا شدن بش اجرا میشه. اون فایل کجاست؟ توی home هست و اسمش bashrc. هست. بازش کنید می‌بینید کلی چیز میز توش نوشته که احتمالا الان شما بعضی‌هاش رو متوجه میشین. میتونین تغییرات متغیرها رو با export اینجا بنویسید. اینجوری دیگه همیشه میمونن. هر جایی از اون فایل که خواستین میتونین بنویسین ولی خوبه که آخرش باشه تا با بقیه‌اش قاطی نشه و بدونین کجا رو تغییر دادین.

این همه ازش استفاده کردیم حالا بیاید دقیق ببینیم چیه. منظورم export هستش. وقتی ما یه متغیر رو تعریف میکنیم و بعدش یه بش دیگه باز کنیم تو اون بش شناخته نمیشه:

دستور export کمک میکنه که بتونیم این کار رو بکنیم:

اما اگه یه بش دیگه کنارش باز کنم اون دیگه این متغیر رو نداره. چی کار کنم؟ آفرین! تو bashrc. مینویسم.

حالا تو bashrc. بنویسم تو همین بش نمیبینمش. چرا؟ چون موقعی که این بش رو باز میکردیم اون خط یا خطوط توی bashrc. نبوده. یعنی ببندیم دوباره باز کنیم؟ نه لازم نیست. میتونید از دستور source استفاده کنید:

به جاش میشه از نقطه هم استفاده کرد:

این دو تا دستور که کارشون یکیه چی کار میکنن؟ وقتی ما یه اسکریپت رو تو بش اجرا میکنیم یه بش جدید باز میشه و دستورات توی اون اجرا میشن. پس اگه متغیری یا تابعی اونجا تعریف بشه ما تو این بش نمیتونیم ببینیمش. source یا نقطه میان یه اسکریپت رو توی همین بش اجرا میکنن. در نتیجه ما به متغیرهای اون اسکریپت دسترسی داریم. این مثال رو ببینید:

یه فایل ساده دارم که توش یه متغیر تعریف کردم. وقتی اجراش کنم اون متغیر ناشناخته‌اس. ولی وقتی اون فایل رو source کردم، متغیر شناخته شده بود.

این هم از این. یه کم پراکنده بود مطالب ولی لازم بود که گفته بشن. ان شاء الله در قسمت‌های بعدی به سراغ دستورهایی که تو لینوکس خیلی به درد میخورن میریم و از فضای بش فعلا خارج میشیم. امیدوارم مطلب مفیدی بوده باشه. اگه نظری یا سوالی دارید این پایین بپرسید.

قسمت قبلی

قسمت بعدی