Bash

بش یک پوسته یونیکس است که به صورت آزاد توسط برایان فاکس برای پروژه گنو نوشته شده‌است. نام بش سرنام B ourne- a gain sh ell در انگلیسی است.
ویژگی‌ها
بش یک پوسته پازیکس با تعداد قابل توجهی افزونه است. در ابتدا این پوسته برای سیستم‌عامل گنو طراحی شده‌بود. اما بش در اکثر سیستم‌عامل‌های خانواده شبه-یونیکس قابل اجراست. پوسته پیش‌فرض در اکثر سیستم‌عامل‌هایی که از هسته لینوکس استفاده می‌کنند، بش است. همچنین پوسته پیش‌فرض سیستم‌عامل مک اواس ده که مبتنی بر داروین است نیز می‌باشد. این پوسته برای سیستم‌عامل مایکروسافت ویندوز به وسیله شبیه‌ساز پوزیکس به نام سیگوین انتقال داده شده‌است.
اکثر قریب به اتفاق اسکریپت‌های نوشته شده برای پوسته بورن بدون تغییر در Bash نیز قابل اجرا هستند. همچنین در شکل دستورهای (Command Syntax) بش، از Korn shell و سی شل نیز الهام گرفته شده است، مانند ویرایش خط فرمان، تاریخچه فرمان، متغیرهای RANDOM$ و PPID$ و جایگزینی فرمان مطابق پازیکس (…)$ . تکمیل خط فرمان نیز از ویژگی‌های پرکاربرد Bash است که می‌توان با زدن کلید تب نام ناکامل برنامه‌ها، فایل‌ها و متغیرها را به صورت خودکار کامل کرد.
بش دارای تعداد بسیاری افزونه است که Bourne shell فاقد آنهاست. بش می‌تواند بر خلاف Bourne shell بدون اجرا کردن پروسه‌ای بیرونی بر روی اعدا صحیح محاسباتی را انجام دهد. بش از شکل دستوری ((…)) و متغیرهایی به صورت ((…))$ برای اینکار استفاده می‌کند. شکل دستورهای بش بگونه‌ای است که امکان تغییر مسیر ورودی/خروجی را به شکل ساده‌ای به کاربر می‌دهد. به عنوان نمونه بش می‌تواند خروجی استاندارد (stdout) و خطای استاندارد (stderr) را توسط اپراتور command> file 2>-1 انجام داد که نسبت به بش سخت‌تر است. به دلیل این تفاوت‌ها اسکریپت‌های نوشته شده برای بش، بندرت در Bourne shell یا Korn Shell قابل اجرا هستند مگر اینکه در نوشتن آن‌ها به سازگاری فرمانهای مورد استفاده توجه شود. البته در حالت Posix mode خیلی بیشتر از پازیکس تبعیت می‌کند.
افزونه‌های براکت
یکی از ویژگی‌هایی که از سی شل به درون Bash راه یافته افزونه‌های براکت است که می‌توان توسط این امکان ترکیب‌هایی تکرار شونده بوجود آورد. ترتیب اجرای این دستورهای گسترش یافته از چپ به راست است. به نمونه‌های زیر توجه کنید :
echo a{p,c,d,be # ape ace ade abe
echo {a,b,c{d,e,f # ad ae af bd be bf cd ce cf
از این ویژگی نمی‌توان در اسکریپت‌هایی که قصد داریم قابل حمل باشند استفاده کرد، به دلیل اینکه Bourne shell خروجی دیگری برای آن تولید می‌کند :
A traditional shell does not produce the same output
echo a{p,c,d,be # a{p,c,d,be
وقتی براکت‌ها توسط کارکترهای جایگزین استفاده شوند، ابتدا براکت‌ها و سپس کارکترهای جایگزین اعمال می‌شوند. به عنوان نمونه برای نمایش لیستی از تصاویر JPEG و PNG موجود در دایرکتوری فعلی، می‌توان از دستور زیر استفاده کرد:
ls *.{jpg,jpeg,png # expands to *.jpg *.jpeg *.png - after which,
# the wildcards are processed
اسکریپت‌های راه‌اندازی
وقتی Bash اجرا می‌شود، دستورهای موجود در اسکریپتهای مختلفی را اجرا می‌کند.
وقتی Bash به عنوان یک پوسته تعاملی اجرا می‌شود، ابتدا اگر فایل etc/profile/ موجود باشد دستورهای درون آن را می‌خواند و اجرا می‌کند. سپس بترتیب بدنبال یکی از فایلهای bash_profile. یا bash_login. یا profile. در دایرکتوری خانگی کاربر می‌گردد ( /~ ). هر کدام را که در ابتدا پیدا کرد، دستورهای درون آن را می‌خواند و اجرا می‌کند.
میانبرهای صفحه‌کلید
میانبرهای گفته شده در زیر برای حالت پیش‌فرض (ایمکس) است، میانبرهای ویم را می‌توان توسط دستور set -o vi فعال کرد.
: تکمیل خودکار از جایی که مکان‌نما وجود دارد.
: انتقال مکان‌نما به ابتدای خط (معادل کلید )
: انتقال مکان‌نما به انتهای خط (معادل کلید )
: فراخوانی فرمان قبلی (معادل کلید )
: فراخوانی فرمان بعدی (معادل کلید )
: جستجوی آخرین فرمانی که دارای کارکتر (های) مشخصی باشد. زدن دوباره این کلید در هنگام جستجو، به فرمان قبلی‌تر رجوع می‌کند.
: اجرای فرمانی که در جستجو یافته شد.
: پاک کردن محتویات صفحه‌نمایش (معادل فرمان clear ).
: پاک کردن محتویاتی از خط که قبل از مکان‌نما وجود دارند و کپی کردن آن‌ها درون بریده‌دان.
: پاک کردن محتویاتی از خط که بعد از مکان‌نما وجود دارند و کپی کردن آن‌ها درون بریده‌دان.
: پاک کردن کلمه قبل از مکان‌نما و کپی کردن آن درون بریده‌دان.
: چسباندن محتویات بریده‌دان از جایی که مکان‌نما وجود دارد.
: ارسال یک نشانگر EOF که باعث بسته شدن خط فرمان فعلی می‌شود (معادل دستور exit ). (تنها در زمانی این اتفاق می‌افتد که متنی در خط فعلی موجود نباشد)
: ارسال یک سیگنال از نوع SIGINT به پروسه فعلی، که باعث پایان اجرا و بسته شدن آن می‌شود.
: ارسال یک سیگنال از نوع SIGTSTP به پروسه فعلی، به باعث به تعلیق درآمدن آن می‌شود؛ که برای برگشت دادن آن می‌توان از دستور fg process-name-or-job-id استفاده کرد.
: ویرایش خط فعلی در ادیتوری که توسط متغیر EDITOR$ تعریف شده‌است.
: حرکت به جلو به اندازه یک واژه.
: حرکت به عقب به اندازه یک واژه.
: برش کلمه واقع در قبل از مکان‌نما
: برش کلمه واقع در بعد از مکان‌نما
: تبدیل تمام حروف کوچک به بزرگ، واقع در بعد از مکان‌نما تا انتهای کلمه فعلی
: تبدیل تمام حروف بزرگ به کوچک، واقع در بعد از مکان‌نما تا انتهای کلمه فعلی
: تبدیل حرف واقع در زیر مکان‌نما از کوچک به بزرگ و رفتن به انتهای کلمه فعلی
: انصراف تغییرات و برگرداندن محتویات خط فعلی به همان شکلی که در تاریخچه خط فرمان موجود بود.
تاریخچه