linuxShellپوستهٔ لینوکس چیست؟ تفاوت Bash با ترمینال
پوسته فرمانها را تفسیر میکند و ترمینال رابط ورود و نمایش است؛ نقش نقلقول در حفظ آرگومانها را با مثال کوتاه Bash بررسی کنید.
مفهوم به زبان ساده
پوسته برنامهای برای تفسیر فرمانها و ترکیب ابزارهاست. Bash یکی از پوستههاست، اما هر محیط لینوکسی الزاماً از Bash استفاده نمیکند. ترمینال رابطی برای ورود و نمایش متن است؛ ممکن است همان ترمینال به یک پوستهٔ محلی یا نشست دوردست #linux-ssh وصل شده باشد. تشخیص این لایهها کمک میکند بدانیم یک دستور روی کدام دستگاه و با چه قواعدی اجرا میشود.
پوسته پیش از فراخوانی بسیاری از برنامهها، گسترش متغیر، تقسیم واژه و هدایت ورودی و خروجی را انجام میدهد. نقلقول درست بخشی از قرارداد فرمان است؛ مسیر دارای فاصله نباید ناخواسته به چند آرگومان تبدیل شود. موفقیت تفسیر فرمان نیز به معنی موفقیت خود برنامه نیست. پس از اجرا باید #linux-exit-status و خروجی مربوط را با انتظار مسئله مقایسه کنیم، نه اینکه فقط نبود پیام روی صفحه را موفقیت بنامیم.
مثال، Bash تازهای را بدون خواندن فایلهای آغازین معمول آن اجرا میکند؛ هدف، کوچککردن تفاوت تنظیمات شخصی در همین تمرین است. نام آزمایشی با فاصله داخل یک مقدار میماند. دو آرگومان بعد از نام صفرِ فرمان نیز دو مورد شمرده میشوند، هرچند یکی فاصله دارد. این نمونه فایل نمیسازد و فقط متن چاپ میکند. برای تمرین، نتیجه را پیش از اجرا بنویسید؛ حذف نقلقول را فقط روی همین دادهٔ ساختگی بررسی کنید.
کجا به کار میآید؟
- اجرای قابل فهم فرمانها و اسکریپتهای آزمایشگاهی
- حفظ مسیرها و متنهای دارای فاصله بهعنوان یک آرگومان
از تعریف تا یک مثال واقعی
bash --noprofile --norc -c 'name="دوست من"; printf "<%s>\n" "$name"; printf "items=%s\n" "$#"' darsavand-lab 'a b' 'c'
<دوست من> items=2
این مثال چطور کار میکند؟
متن بین نقلقولها یک مقدار واحد باقی میماند.
نام darsavand-lab نقش آرگومان صفر را دارد و در شمارش $# نیست.
a b و c دو آرگومان مستقلاند؛ فاصلهٔ داخلی مورد اول آن را دو تکه نمیکند.
اشتباه رایج
نام متغیر SHELL لزوماً پوستهٔ همین فرایند را ثابت نمیکند؛ همچنین همهٔ نحوهای Bash در sh قابل استفاده نیستند.
این را به خاطر بسپارید
ابتدا پوسته و مرز آرگومانها را مشخص کنید؛ سپس خروجی برنامه را تفسیر کنید.