Bash یک پوسته یونیکس و زبان دستوری است که به عنوان یک نرم افزار رایگان جایگزین پوسته Bourne، به وسیله بریان فوکس و برای پروژه GNU نوشته شده است. با اولین انتشار آن در 1989، این برنامه به طور گسترده ای به عنوان پوسته پیش فرض برای توزیع های لینوکس و سیستم عامل macOS اپل ( پیشتر با نام OS X) توزیع شده است. در سال 2016، این برنامه همچنین به وسیله مایکروسافت برای استفاده در بروزرسانی سالیانه ویندوز 10 در دسترس قرار گرفت که البته به طور پیش فرض نصب نشده است.
Bash یک پردازنده دستور است که عمدتا در یک پنجره متنی که کاربر دستوراتی که سبب ایجاد اقدام ها می شوند را در آن می نویسد، اجرا می شود. Bash همچنین می تواند دستورات را از یک فایل که اسکریپت نامیده می شود، بخواند. همانند تمامی پوسته های یونیکس، این پوسته نیز از گسترش نام فایل[1] (تطبیق تصادفی[2])، پایپینگ، here documents [3]، جایگزینی فرمان، متغیر ها و ساختار های کنترلی برای ارزیابی شرایط[4] و تکرار پشتیبانی می کند. کلمات کلیدی، دستور زبان و دیگر ویژگی های پایه زبان، همگی از sh کپی برداری شده اند. Bash دیگر ویژگی ها از قبیل تاریخچه نیز از csh و ksh کپی گرفته شده اند. Bash یک پوسته پوزیکس[5] است، اما با تعدادی افزونه.[6]
نام این پوسته، مخففی است برای Bourne-again shell، جناسی برای نام پوسته بورن[7] که این Bash، جایگزین آن شده و عبارت “تولد دوباره” که نشان دهنده باز تولد روحانی در مسیحیت معاصر آمریکایی است. یک حفره امنیتی در Bash که تاریخ آن به نسخه 10.3 برنامه (آگوست 1989) باز می گردد، یعنی dubbed Shellshock، در اوایل سپتامبر 2014 کشف شده، و به سرعت به طیف گسترده ای از حملات اینترنتی منجر شد. با شناسایی این باگ ها، پچ هایی برای رفع این مشکلات ایجاد شدند اما هنوز همه کامپیتور ها، مورد به روز رسانی قرار نگرفته اند.
ویژگی ها
دستور زبان فرمان Bash، یک سوپر مچموعه[8] از دستور زبان فرمان پوسته بورن است. Bash می تواند اکثر اسکریپت های پوسته بورن را ، به استثنای اسکریپ هایی که در حاشیه رفتار دستوری بورن، به طور متفاوتی در Bash تفسیر شده و یا تلاش می کنند تا یک دستور سیستمی که با یک فرمان داخلی جدید Bash مطابقت دارد را اجرا کنند، بدون اصلاح کردن آن ها، اجرا نماید.
دستور زبان فرمان های Bash، شامل ایده هایی مانند خط فرمان ویرایش، تاریخچه فرمان، مسیر پشته، متغیر های $RANDOM و $PPID و نحو فرمان های جایگزین پوزیکس $(…) ، می شود که از پوسته کورن (KSH) و پوسته سی (CSH) گرفته شده اند. هنگامی که کاربر کلید tab را در یک فرمان پوسته تعاملی فشار دهد، Bash به صورت خودکار از خط فرمان استفاده کرده تا نام های برنامه، نام فایل ها و نام متغیر های نیمه تایپ شده را کامل کند. سیستم کامل کننده خط فرمان Bash ، بسیار انعطاف پذیر و قابل شخصی سازی بوده و غالبا در پکیج هایی با توابعی که آرگومان ها و نام های فایل را برای برنامه ها و وظایف خاص کامل می کنند، عرضه می شود.
دستور زبان Bash حاوی بسیاری از افزونه هایی است که بورن فاقد آن ها بود. Bash می تواند محاسبات اعداد صحیح(“ارزیابی حسابی”) را بدون فرآیند های بیرونی، انجام دهد. برای این منظور، Bash از نحو دستور ((…)) و متغیر های ((…))$ استفاده می کند. دستور زبان این پوسته، تغییر مسیر ورودی/خروجی را ساده می کند. برای مثال، این برنامه می تواند با استفاده از عملگر &>، خروجی استاندارد (stdout) و خطای استاندارد (stderr) را در یک زمان تغییر مسیر دهد. این راه، ساده تر از شیوه معادل پوسته بورن ‘command > file 2>&1’ است. Bash با استفاده از دستور <(command) و >(command) که خروجی ( یا ورودی) یک دستور را در جایی که نام فایل به طور معمول استفاده می شود، جایگزین می کند، از فرآیند جایگزینی پشتیبانی می کند ( این کار از طریق لوله های بدون نام /proc/fd/، بر روی سیستم هایی که از آن پشتیبانی می کنند، و یا از طریق لوله هایی که در جای لازم، نام های موقت دارند، اجرا می شود).
[1] filename globbing- به معنی فرآیند گسترش یک نام فایل غیر خاص که حاوی یک فرانویسه است، به مجموعه ای از نام فایل هایی که در کامپیوتر یا سرور یا … ذخیره شده اند.
[2] wildcard matching
[3] یک لفظ فایل یا لفظ جریان ورودی است
[4] condition-testing
[5] POSIX
[6] extension
[8] Super set