بَش (به انگلیسی: Bash) یک پوسته یونیکس است که به صورت آزاد توسط برایان فاکس (به انگلیسی: Brian Fox) برای پروژهٔ گنو نوشته شدهاست. نام بَش سرنام Bourne-again shell در انگلیسی است.
ویژگیها
بش یک پوستهٔ پازیکس با تعداد قابل توجهی افزونه است. در ابتدا این پوسته برای سیستمعامل گنو طراحی شدهبود. اما بش در اکثر سیستمعاملهای خانواده شبه-یونیکس قابل اجراست. پوستهٔ پیشفرض در اکثر سیستمعاملهایی که از هسته لینوکس استفاده میکند، است. همچنین پوستهٔ پیشفرض سیستمعامل مک اواس ده که مبتنی بر داروین است نیز میباشد. این پوسته برای سیستمعامل مایکروسافت ویندوز به وسیلهٔ شبیهساز پوزیکس به نام سیگوین انتقال داده شدهاست.
اکثر قریب به اتفاق اسکریپتهای نوشته شده برای پوسته بورن بدون تغییر در Bash نیز قابل اجرا هستند. همچنین در شکل دستورهای (Command Syntax) بش، از Korn shell و سی شل نیز الهام گرفته شده است، مانند ویرایش خط فرمان، تاریخچۀ فرمان، متغیرهای RANDOM$
و PPID$
و جایگزینی فرمان مطابق پازیکس (…)$
. تکمیل خط فرمان نیز از ویژگیهای پرکاربرد Bash است که میتوان با زدن کلید تب نام ناکامل برنامهها، فایلها و متغیرها را بصورت خودکار کامل کرد.
بش دارای تعداد بسیاری افزونه است که Bourne shell فاقد آنهاست. بش میتواند بر خلاف Bourne shell بدون اجرا کردن پروسهای بیرونی بر روی اعدا صحیح محاسباتی را انجام دهد. بش از شکل دستوری ((…))
و متغیرهایی بصورت ((…))$
برای اینکار استفاده میکند. شکل دستورهای بش بگونهای است که امکان تغییر مسیر ورودی/خروجی را به شکل سادهای به کاربر میدهد. بعنوان نمونه بش میتواند خروجی استاندارد (stdout) و خطای استاندارد (stderr) را توسط اپراتور <& در یک زمان تغییرمسیر دهد. همین کار را در Bourne shell باید توسط 'command> file 2>&1'
انجام داد که نسبت به بش سختتر است. بدلیل این تفاوتها اسکریپتهای نوشته شده برای بش، بندرت در Bourne shell یا Korn Shell قابل اجرا هستند مگر اینکه در نوشتن آنها به سازگاری فرمانهای مورد استفاده توجه شود. البته در حالت Posix mode خیلی بیشتر از پازیکس تبعیت میکند.
افزونههای براکت
یکی از ویژوگیهایی که از سی شل به درون Bash راه یافته افزونههای براکت (به انگلیسی: Brace expansion) است که میتوان توسط این امکان ترکیبهایی تکرار شونده بوجود آورد. ترتیب اجرای این دستورهای گسترش یافته از چپ به راست است. به نمونههای زیر توجه کنید :
echo a{p,c,d,b}e # 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,b}e # a{p,c,d,b}e
وقتی براکتها توسط کارکترهای جایگزین (به انگلیسی: wildcards) استفاده شوند، ابتدا براکتها و سپس کارکترهای جایگزین اعمال میشوند. بعنوان نمونه برای نمایش لیستی از تصاویر 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
فعال کرد.
- Tab ↹ : تکمیل خودکار از جایی که مکاننما وجود دارد.
- Ctrl+a : انتقال مکاننما به ابتدای خط (معادل کلید Home)
- Ctrl+e : انتقال مکاننما به انتهای خط (معادل کلید End)
- Ctrl+p : فراخوانی فرمان قبلی (معادل کلید ↑)
- Ctrl+n : فراخوانی فرمان بعدی (معادل کلید ↓)
- Ctrl+r : جستجوی آخرین فرمانی که دارای کارکتر(های) مشخصی باشد. زدن دوبارۀ این کلید در هنگام جستجو، به فرمان قبلیتر رجوع میکند.
- Ctrl+o : اجرای فرمانی که در جستجو یافته شد.
- Ctrl+l : پاک کردن محتویات صفحهنمایش (معادل فرمان
clear
). - Ctrl+u : پاک کردن محتویاتی از خط که قبل از مکاننما وجود دارند و کپی کردن آنها درون بریدهدان.
- Ctrl+k : پاک کردن محتویاتی از خط که بعد از مکاننما وجود دارند و کپی کردن آنها درون بریدهدان.
- Ctrl+w : پاک کردن کلمۀ قبل از مکاننما و کپی کردن آن درون بریدهدان.
- Ctrl+y : چسباندن محتویات بریدهدان از جایی که مکاننما وجود دارد.
- Ctrl+d : ارسال یک نشانگر EOF که باعث بسته شدن خط فرمان فعلی میشود (معادل دستور
exit
). (تنها در زمانی این اتفاق میافتد که متنی در خط فعلی موجود نباشد) - Ctrl+c : ارسال یک سیگنال از نوع SIGINT به پروسۀ فعلی، که باعث پایان اجرا و بسته شدن آن میشود.
- Ctrl+z : ارسال یک سیگنال از نوع SIGTSTP به پروسۀ فعلی، به باعث به تعلیق در آمدن آن میشود. که برای برگشت دادن آن میتوان از دستور
fg process-name-or-job-id
استفاده کرد. - Ctrl+x Ctrl+e : ویرایش خط فعلی در ادیتوری که توسط متغیر EDITOR$ تعریف شده است.
- Alt+f : حرکت به جلو به اندازۀ یک واژه.
- Alt+b : حرکت به عقب به اندازۀ یک واژه.
- Alt+Del : برش کلمۀ واقع در قبل از مکاننما
- Alt+d : برش کلمۀ واقع در بعد از مکاننما
- Alt+u : تبدیل تمام حروف کوچک به بزرگ، واقع در بعد از مکاننما تا انتهای کلمۀ فعلی
- Alt+l : تبدیل تمام حروف بزرگ به کوچک، واقع در بعد از مکاننما تا انتهای کلمۀ فعلی
- Alt+c : تبدیل حرف واقع در زیر مکاننما از کوچک به بزرگ و رفتن به انتهای کلمۀ فعلی
- Alt+r : انصراف تغییرات و برگرداندن محتویات خط فعلی به همان شکلی که در تاریخچۀ خط فرمان موجود بود.